2011-07-26 63 views
0

我有兩個類A和B.使用其他類對象訪問對象(UIView)時出現問題!

類A包含一個UIView名爲MyView的,並且也是方法的MyMethod設置MyView的的位置。

-(void)MyMethod:(NSString *)justCheck 
{ 
[self.view addSubview:myView]; 
[self.view bringSubviewToFront:myView]; 

CGRect mframe = [myView frame]; 

NSLog(@"------------> MyMethod Called = %@",justCheck); 


    // EDIT: the following NSLogs are added later-------------------- 

NSLog(@"------------> MyMethod Called:mframe:x = %g",mframe.origin.x);  //0 

NSLog(@"------------> MyMethod Called:mframe:y = %g",mframe.origin.y);  //42 

NSLog(@"------------> MyMethod Called:mframe:H = %g",mframe.size.height); //317 

NSLog(@"------------> MyMethod Called:mframe:W = %g",mframe.size.width); //320 


    //--------------------------------------------------------------- 

mframe.origin.y = 42; 

[myView setFrame:mframe]; 
} 

當在名爲buttonOfA A類按鈕調用此的MyMethod,它完美的作品,我可以看到的MyView的位置42 代碼如下,

-(IBAction)buttonOfA:(id)sender 
{ 
[self MyMethod:@"I am A"]; 
} 

但是,當名爲buttonOfB B類的按鈕試圖調用該方法,工程的NSLog,但我看不出在如下位置42碼的MyView的,

-(IBAction)buttonOfB:(id)sender 
{ 
[objOfA MyMethod:@"I am B"]; //objOfA is the object of class A 
} 

w ^帽子在這裏發生? 我一直在努力弄清楚這個問題,但是我做不到。 Plz幫助我。

感謝名單:)

編輯:4個NSLogs在myMethod的加入()

+0

聽起來像objOfA是零。你如何設置它? – hwaxxer

+0

@hwaxxer - 它像A * objOfA = [[A alloc] init];並注意,NSLog消息被打印到控制檯上------------> MyMethod Called = I是B.如果objOfA wal nil,是否可以打印? –

+0

是的,你是對的。錯過了NSLog工作正常。或許在電話會議時這種觀點是無效的。 – hwaxxer

回答

0

確保myView實例變量在當B類對其調用MyMethod:時,類A對象被初始化並添加到超級視圖。否則,設置框架將不起作用。

+0

我編輯了這個問題。我可以得到x,y,mframe的高度和寬度,但看不到視圖。我認爲myView正在顯示,但有些方式是不可見的。它可能是什麼?任何想法? –

0

保持到類型A的對象的引用,但它應該是這創造了UIView相同的對象。因此最好返回對象的單例實例。

對類A對象使用返回的單例調用您的方法。

+0

myMethod在類A中,我試圖從類B調用。那麼如何使用self? –

+0

哦,對不起,我誤讀了,現在編輯答案。 –

+0

Thanx的答案:)我是一個初學者,你可以PLZ簡化一些例子的答案。 –

-1

因爲MyView的是不是屬性只是讓A級的屬性,做這項工作

-(void)MyMethod:(NSString *)justCheck 
{ 

    CGRect mframe = [self.myView frame]; 

    NSLog(@"------------> MyMethod Called = %@",justCheck); 

    mframe.origin.y = 42; 

    [self.myView setFrame:mframe]; 
} 

要使它成爲一個屬性,而不是它聲明爲 的UIView * MyView的的;

做它像這樣.h文件

@property(nonatomic,retain) UIView* myView; 

A.m做這樣的

@synthesize myView; 

,你不必改變任何代碼只是替換所有myView with self.myView

+0

沒有代碼可以證明這一點。看到我對原始問題的評論。 – hwaxxer

+0

雅是因爲他得到輸出形式NSLog從下面看到第5行 –

+0

但是,如果它已經被釋放,程序會崩潰。 – hwaxxer