Предупреждение компилятора XCode: 'foo' может не отвечать на -bar - PullRequest
3 голосов
/ 19 июля 2009

Я пытаюсь разобраться в Objective-C для iPhone. Пока что мое приложение компилируется и работает нормально, но я получаю предупреждение компилятора, от которого не могу избавиться.

Заголовок для одного класса: (отрезано)

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

Реализация для этого класса: (также разрезано)

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

Я создаю экземпляр PersonDetailViewController в PersonListViewController и вызываю:

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

на самом деле он отвечает просто отлично, но я не могу понять, как организовать мои заголовки так, чтобы компилятор знал, что ответит ...

Я не в Google ... надеюсь, я дал достаточно информации, и кто-нибудь может помочь.

Спасибо, куча!

Ответы [ 2 ]

4 голосов
/ 19 июля 2009

Очевидно, у вас есть personDetailViewController, объявленный как UIViewController? Вы можете привести контроллер в явном виде:

[(PersonDetailViewController*)personDetailViewController setPerson:person];

Но, парень, это безобразно. Было бы лучше просто объявить personDetailViewController как PersonDetailViewController в заголовке PersonListViewController. Надеюсь, я понял это правильно, я немного ошеломлен всеми длинными именами:)

2 голосов
/ 19 июля 2009

Я немного растерялся ... Зачем вы это делаете:

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

Ваш человек объявлен NSDictionary, но инициирует класс Person ... Разве это не должно быть

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

редактировать Я не заметил @property & synthesize, так что вы были правы, мой плохой ... приемлемый ответ - это то, что вы искали!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...