XCode编译器警告:'foo'可能不响应-bar

时间:2009-07-19 17:53:37

标签: iphone objective-c xcode

我正试图让我的头围绕着iPhone的Objective-C。到目前为止,我的应用程序正在编译和运行,但是我收到了一个编译器警告我无法摆脱。

一个班级的标题:(剪掉)

@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'

它确实响应得很好,但我无法弄清楚如何组织我的标题,以便编译器知道会响应什么......

我全都不在谷歌...希望我已经提供了足够的信息,而且有人可以提供帮助。

感谢一堆!

2 个答案:

答案 0 :(得分:4)

显然您已将personDetailViewController声明为UIViewController?您可以明确地转换控制器:

[(PersonDetailViewController*)personDetailViewController setPerson:person];

但男孩这很难看。最好在personDetailViewController标头中简单地声明PersonDetailViewControllerPersonListViewController。我希望我做对了,我对所有长名有点茫然:))

答案 1 :(得分:2)

我有点困惑...... 你为什么要这样做:

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

你宣称自己是一名NSDictionary,但是正在创办一个人类...... 不应该是

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

修改 我没注意到@property&合成,所以你在那里是正确的,我的坏......接受的答案就是你在寻找的东西!