2013-12-05 1 views
0

Я новичок в Objective-C. У меня возникла проблема с попыткой использовать свойство getter. У меня есть свойство доступа к экземпляру очень простого класса. Мой интерфейс выглядит следующим образом:Objective-C Property getter throwing exception «Непризнанный селектор, отправленный экземпляру»

@interface AppDelegate : UIResponder <UIApplicationDelegate> 
//... 
@property (strong, nonatomic, readonly) MyController* myController; 
@end 

И моя реализация выглядит следующим образом:

@implementation AppDelegate 
{ 
} 

@synthesize myController = _myController; 
.... 
//Getter 
- (MyController*)myController 
{ 
    return _myController; 
} 
@end 

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

AppDelegate* appDelegate = (AppDelegate*)[UIApplication sharedApplication]; 
MyController* myController = appDelegate.myController; //unrecognized selector sent to instance 

Будучи новым для Objective-C, я уверен, что я делаю что-то ужасно неправильно. Что здесь не так?

ответ

4

Заменить вызов, инстанцирует appDelegate со следующим:

AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate]; 

Прямо сейчас вы отправляете сообщение в UIApplication инстанции, а не экземпляр AppDelegate. Обратите внимание, что тип возвращаемого +[UIApplication sharedApplication] является UIApplication *, и тип возвращаемого -[UIApplication delegate] является id<UIApplicationDelegate> (во время выполнения, при условии, все настроено правильно, этот делегат объект будет AppDelegate экземпляр.

сообщение об ошибке, вероятно, дал вам намек здесь - это было бы, вероятно, было что-то вроде:

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UIApplication myController]: unrecognized selector sent to instance 

присутствия UIApplication в разделе причины говорит вам, что UIApplication класс не признает этот селектор, а - до квадратных скобок означает, что сообщение отправлено на инстанс e of UIApplication. Если вы отправили непризнанный селектор объекту класса, то - будет заменен на + (это общая нотация для передачи сигнатур методов).