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

17

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

У меня есть категория на UILabel с свойством.
Определены геттер и сеттер.
На самом деле у меня такое же свойство в двух разных категориях (для двух разных классов: 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

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

Спасибо.

Майкл.

    
задан Michael Kessler 03.03.2011 в 12:26
источник
  • Интересно ... Они работают при создании кода? (нет XIB) –  Eonil 03.03.2011 в 12:38
  • Попробуйте [[[UILabel alloc] init] test], чтобы сузить возможный источник проблемы. –  Jim 03.03.2011 в 12:42
  • Спасибо за быстрые ответы. @Steven уже ответил на мой вопрос. Файл «UILabel + text.m» был добавлен в другую цель ... –  Michael Kessler 03.03.2011 в 12:46
  • У меня была эта проблема, потому что мне не хватало флаг -ObjC. –  Liron 31.05.2013 в 12:01

1 ответ

42

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

Вы уверены, что «UILabel + text.m» находится в цели?

    
ответ дан Steven Kramer 03.03.2011 в 12:37
источник
  • Вот и все! Я всегда забываю проблему с целями ... Есть ли способ определить новые файлы, которые будут добавлены по всем целевым объектам по умолчанию? –  Michael Kessler 03.03.2011 в 12:44
  • Что я не знаю, Xcode обычно кажется своим путём в моем случае. Может быть, по умолчанию ваш последний выбор? –  Steven Kramer 03.03.2011 в 23:18
  • -all_load работает большую часть времени, если вы хотите узнать причину, затем проверьте этот ответ: stackoverflow.com/a/2906210/146032 –  bithavoc 13.01.2013 в 17:41
  • «all_load» больше не требуется (Apple, наконец, исправил это), но Xcode 4.0 -> 4.6 (и более, возможно) имеет неприятную ошибку, где категории иногда исчезают из списка «источники компиляции» или их заголовки исчезают из списка «заголовков копий» в сборке библиотеки. Благодаря! –  Adam 25.04.2013 в 16:21
  • Я на Xcode 5.1.1, и мне нужно добавить -all_loadto Другие флаги компоновщика. –  WebOrCode 29.08.2014 в 18:56