17

首先,我看到有很多关于“无法识别的选择器发送到实例”问题的问题。
我见过很少,但没有看到有关访问类别属性中定义的内容...

我在 UILabel 上有一个带有属性的类别。
定义了 getter 和 setter。
实际上,我在 2 个不同的类别中有相同的属性(对于 2 个不同的类:UIButton 和 UILabel)。
问题是我可以为 UIButton 访问此属性,但不能为 UILabel 访问此属性。
一旦我尝试访问 UILabel(text) 类别中的任何方法/属性,它就会删除“-[UILabel 测试]:无法识别的选择器发送到实例 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

任何帮助将不胜感激。
我不知道可能的问题...

谢谢你。

迈克尔。

4

2 回答 2

42

你在使用静态库吗?如果是这样,请将 all_load 添加到其他链接器标志。

您确定“UILabel+text.m”在目标中吗?

于 2011-03-03T11:37:51.620 回答
0

我在具有多个静态框架的项目中遇到了同样的问题。

添加all_load到链接器标志并没有解决我的问题!我必须启用构建设置GENERATE_MASTER_OBJECT_FILE = YES,以便在运行时正确找到该类别。

于 2020-10-15T19:21:00.157 回答