#iphone #objective-c #xcode4.2 #selector
#iPhone #objective-c #xcode4.2 #селектор
Вопрос:
Эта ошибка сбивает меня с толку, но здесь идет:
Я пытался настроить IBAction для запуска при прикосновении внутри UIButton. По какой-то причине он не работал и на самом деле не давал мне никаких ошибок gdb. Время от времени в нем упоминается нераспознанный селектор. Я проверил, чтобы убедиться, что владельцем моего файла был правильный класс, и все было под контролем, и так оно и было, поэтому я запустил его снова и по-прежнему ничего.
Я подумал, что это может быть проблема с Interface Builder, поэтому я использовал addTarget: на кнопке, установив цель как self, а селектор — селектор метода, который я хотел вызвать, и все равно получил нераспознанную ошибку селектора. Чтобы проверить, существует ли селектор, я запустил [self performSelector:] на селекторе нужного мне метода, и он сработал. Итак, в основном прямо сейчас у меня есть это:
- (void)viewDidLoad {
[super viewDidLoad];
[self performSelector:@selector(hi)];
[_backButton addTarget:self action:@selector(hi) forControlEvents:UIControlEventTouchUpInside];
}
- (void)hi {
NSLog(@"HI");
}
Селектор выполнения работает отлично и регистрирует «ПРИВЕТ». Вот кикер, когда я нажимаю _backButton, он выдает мне нераспознанную ошибку селектора, хотя я только что вызвал ее, и она сработала:
2011-10-22 19:54:40.824 VideoGif[396:707] -[NSKeyValueObservance hi]: unrecognized selector sent to instance 0x590690
2011-10-22 19:54:40.831 VideoGif[396:707] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[NSKeyValueObservance hi]: unrecognized selector sent to instance 0x590690'
Я сделал снимки экрана наконечника и файла реализации, которые можно просмотреть здесь: http://imgur.com/a/q2a6N
Кто-нибудь знает, что происходит?
Комментарии:
1. Возможно ли, что экземпляр CaptionEditorViewController по какой-то причине освобождается, а указатель (self) указывает на поврежденную память, которая является NSKeyValueObservance ?
2. Я использую ARC, поэтому теоретически этого не должно произойти. Я недостаточно хорошо знаю входы и выходы ARC, хотя я определенно мог бы это исключить.
3. На самом деле, теперь, когда я думаю об этом, класс, который, по его мнению, вызывает селектор, все это время менялся случайным образом, что наводит на мысль о том, о чем вы говорите. Я пойду почитаю ARC и посмотрю, смогу ли я понять, что происходит.
4. Я прошу прощения за то, что, вероятно (не ошибочно), кажется бесстыдным повторением 🙂
5. Похоже, что я сохранял представление моего контроллера представления в переменной экземпляра его родительского элемента, а не в самом контроллере представления. ARC сохранял представление, но по ошибке выпустил контроллер представления, поскольку он думал, что его никто не использует. Этого бы не произошло, если бы вы не оставили свой комментарий.
Ответ №1:
Проблема, вероятно, возникает из-за того, что ваш экземпляр CaptionEditorViewController по какой-то причине освобождается, на что указывают случайные классы, выбрасывающие исключения «нераспознанный селектор»
Комментарии:
1. Убирайся, ты это заслужил!