iPhone: Категория со свойством + неопознанный селектор, отправленный в исключение экземпляра

Прежде всего, я заметил, что есть много вопросов о проблеме «неопознанный селектор, отправленный в экземпляр».
Я видел мало, но ничего не видел о доступе к определенному свойству в категории ...

У меня есть категория на UILabel со свойством.
Получатель и сеттер определены.
На самом деле у меня одно и то же свойство в 2 разных категориях (для 2 разных классов: UIButton и UILabel).
Проблема заключается в том, что я могу получить доступ к этому свойству для UIButton, но не для UILabel.
Как только я пытаюсь получить доступ к любому методу / свойству в категории UILabel (текст), он отбрасывает исключение «- [UILabel test]: неопознанный селектор, отправленный экземпляру 0x4e539f0» .

Файлы обеих категорий импортируются.

Понятия не имею, в чем проблема.

Вот код:

// UILabel+text.h
@interface UILabel (text)
  - (void)test;
@end

// UILabel+text.m
@implementation UILabel (text)
- (void)test {
  NSLog(@"test");
}
@end

// UIButton+text.h
@interface UIButton (text)
  - (void)test;
@end

// UIButton+text.m
@implementation UIButton (text)
- (void)test {
  NSLog(@"test");// works   
}
@end

// Usage (in UIViewController class) - both elements are defined in XIB
[self.button test];// works
[self.label test];// exception

Любая помощь будет принята с благодарностью.
Я понятия не имею о возможных проблемах ...

Спасибо.

Майкл.


person Michael Kessler    schedule 03.03.2011    source источник
comment
Интересно ... Они работают, когда создаются кодом? (нет XIB)   -  person eonil    schedule 03.03.2011
comment
Попробуйте [[[UILabel alloc] init] test] сузить возможный источник проблемы.   -  person Jim    schedule 03.03.2011
comment
Спасибо за быстрые ответы. @ Стивен уже ответил на мой вопрос. Файл UILabel + text.m был добавлен в другую цель ...   -  person Michael Kessler    schedule 03.03.2011
comment
У меня была эта проблема, потому что мне не хватало флага -ObjC.   -  person Liron    schedule 31.05.2013


Ответы (2)


Вы используете статическую библиотеку? Если это так, добавьте all_load к другим флагам компоновщика.

Вы уверены, что "UILabel + text.m" попадает в цель?

person Steven Kramer    schedule 03.03.2011
comment
Вот и все! Я всегда забываю о проблеме с целями ... Есть ли способ определить новые файлы, которые будут добавлены ко всем целям по умолчанию? - person Michael Kessler; 03.03.2011
comment
Чего я не знаю, в моем случае Xcode обычно имеет смысл. Может быть, это ваш последний выбор по умолчанию? - person Steven Kramer; 04.03.2011
comment
-all_load работает в большинстве случаев, если вы хотите узнать причину, проверьте этот ответ: stackoverflow.com/a/2906210/146032 - person bithavoc; 13.01.2013
comment
all_load больше НЕ нужен (Apple наконец исправила это), но Xcode 4.0 - ›4.6 (и более, возможно) имеет неприятную ошибку, когда категории иногда исчезают из списка источников компиляции или их заголовки исчезают из списка копий заголовков в сборке библиотеки. Спасибо! - person Adam; 25.04.2013
comment
Я использую Xcode 5.1.1, и мне нужно добавить -all_loadto Other Linker Flags. - person WebOrCode; 29.08.2014

У меня возникла та же проблема в проекте с несколькими статическими фреймворками.

Добавление all_load во флаги компоновщика не решило проблему! Мне пришлось включить настройку сборки GENERATE_MASTER_OBJECT_FILE = YES, чтобы категория правильно находилась во время выполнения.

person mrtnlst    schedule 15.10.2020