我正试图让我的头围绕着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'
它确实响应得很好,但我无法弄清楚如何组织我的标题,以便编译器知道会响应什么......
我全都不在谷歌...希望我已经提供了足够的信息,而且有人可以提供帮助。
感谢一堆!
答案 0 :(得分:4)
显然您已将personDetailViewController
声明为UIViewController
?您可以明确地转换控制器:
[(PersonDetailViewController*)personDetailViewController setPerson:person];
但男孩这很难看。最好在personDetailViewController
标头中简单地声明PersonDetailViewController
为PersonListViewController
。我希望我做对了,我对所有长名有点茫然:))
答案 1 :(得分:2)
我有点困惑...... 你为什么要这样做:
NSDictionary *person = [[Person alloc] initFromTestArray:[sender tag]];
你宣称自己是一名NSDictionary,但是正在创办一个人类...... 不应该是
Person *person = [[Person alloc] initFromTestArray:[sender tag]];
修改强> 我没注意到@property&合成,所以你在那里是正确的,我的坏......接受的答案就是你在寻找的东西!