2009-07-19 83 views
3

我試圖讓我的頭繞着iPhone的Objective-C。到目前爲止,我的應用程序正在編譯並運行良好,但是我收到了編譯器警告,我無法擺脫。XCode編譯器警告:'foo'可能不會響應到-bar

報頭爲:一類:(剪斷)

@interface PersonDetailViewController : UIViewController { 
    NSDictionary *person; 
} 
@property (retain) NSDictionary *person; 
@end 

實現這個類:(也剪斷)

#import "PersonDetailViewController.h" 
@implementation PersonDetailViewController 
@synthesize person; 
@end 

我創造PersonListViewController的PersonDetailViewController的實例,並美其名曰:

#import "PersonListViewController.h" 
#import "Person.h" 
#import "PersonDetailViewController.h" 

@implementation PersonListViewController 
- (IBAction)myMethod:(id)sender { 
    NSDictionary *person = [[Person alloc] initFromTestArray:[sender tag]]; 
    [personDetailViewController setPerson:person]; 
    [[personDetailViewController person] describe]; 
} 
@end 

然後我通知:

warning: 'UIViewController' may not respond to '-setPerson' (Messages without a matching method signature will be assumed to return 'id' and accept '...' as arguments.) 
warning: 'UIViewController' may not respond to '-person' 

它實際上反應不錯,但我無法弄清楚如何安排我的頭,使編譯器會知道什麼會迴應...

我已與谷歌的希望...我已經提供了足夠的信息,有人可以提供幫助。

謝謝你!

回答

4

顯然你有personDetailViewController宣佈爲UIViewController?你可以明確地投下控制器:

[(PersonDetailViewController*)personDetailViewController setPerson:person]; 

但男孩這是醜陋的。在PersonListViewController標題中簡單地聲明personDetailViewControllerPersonDetailViewController會更好。我希望我說得對,所有的長名都讓我有些茫然:)

2

我有點迷茫...... 你爲什麼這樣做:

NSDictionary *person = [[Person alloc] initFromTestArray:[sender tag]]; 

你聲明的人是一個NSDictionary,但init'ing一個Person類... 不應該它是

Person *person = [[Person alloc] initFromTestArray:[sender tag]]; 

編輯 我沒有注意到@property &合成,所以你是正確的那裏,是我不好......在接受答案是什麼你LO爭取!

+2

我同意第一點,但是`person`是他在頭文件中聲明並在執行過程中合成的屬性。 – 2009-07-19 18:04:54

+0

Ahhhh好點。我忘了@synthesize ...我會編輯我的帖子。 – micmoo 2009-07-19 18:13:29

相關問題