我正在尝试观察视图的BOOL属性。 因为有不同类型的视图要观察,我检查选择器并使用performSelector来获取值。
if( [tab respondsToSelector:@selector(canGoBack)] ) {
[tab addObserver:self forKeyPath:@"canGoBack"
options:NSKeyValueObservingOptionNew
context:NULL];
NSNumber* value = (NSNumber*)[tab performSelector:@selector(canGoBack)];
canGoBack = [value boolValue];
}
但是,我在“[value boolValue]”意外得到了EXC_BAD。 我检查了选项卡,它在错误发生时确实存在。
将代码更改为以下内容后,错误再次被捕获。
if( [tab respondsToSelector:@selector(canGoBack)] ) {
[tab addObserver:self forKeyPath:@"canGoBack"
options:NSKeyValueObservingOptionNew
context:NULL];
canGoBack = [tab canGoBack];
// NSNumber* value = (NSNumber*)[tab performSelector:@selector(canGoBack)];
// canGoBack = [value boolValue];
}
我想知道,为什么?
答案 0 :(得分:0)
我认为你使用canGoBack作为函数,也作为bool值。这就是问题所在。
答案 1 :(得分:0)
因为您的方法canGoBack
返回BOOL
,而performSelector:
则返回id
类型的返回值。 BOOL的结果将不是有效的objc对象的地址,您将其转换为,然后用于发送带有的objc消息。
答案 2 :(得分:0)
canGoBack是选择器方法,你试图为该方法分配一个bool值?怎么可能? 第二个想想,你确定你获得的NSNumber只有1或0,否则强制转换NSNumber t o bool并不是完整的