Семантическая проблема с неродственным объектом в Objective-C - PullRequest
4 голосов
/ 19 августа 2011

У меня есть подкласс UIViewController, который реализует сообщение для инициализации контроллера с пользовательской моделью:

- (id)initWithUser:(FacebookFriend *)user;

Когда я использую это для инициализации моего контроллера:

ProfileViewController *profileViewController = [[ProfileViewController alloc] initWithUser:friend];

Компилятор жалуется на отправку сообщения на NSUserDefaults 'сообщение с тем же именем:

- (id)initWithUser:(NSString *)username;

warning: incompatible Objective-C types 'struct FacebookFriend *', expected 'struct NSString *' when passing argument 1 of 'initWithUser:' from distinct Objective-C type

Я не совсем понимаю, почему он уведомляет меня об этом, поскольку я не думаю, что UIViewController наследуется отNSUserDefaults где угодно.Есть ли способ отключить эту ошибку?Может ли это вызвать проблемы?Должен ли я просто переименовать инициализатор моего класса, чтобы избежать путаницы?

Ответы [ 2 ]

2 голосов
/ 19 августа 2011

Проблема в том, что у вас неоднозначный селектор.Поскольку alloc возвращает общий (для Objective C) тип id, вызов initWithUser: стал неоднозначным, и поэтому его путают с методом NSUserDefaults initWithUser:.Компилятор думает, что вы пытаетесь использовать это.

Вы можете устранить неоднозначность, применив:

ProfileViewController *profileViewController = [(ProfileViewController*)[ProfileViewController alloc] initWithUser:friend];
1 голос
/ 19 августа 2011

Вы пытались напрямую разыграть результат -alloc? Как то так:

ProfileViewController *profileViewController = [(ProfileViewController *)[ProfileViewController alloc] initWithUser:friend];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...