iOS 9崩溃 - 无法识别的选择器发送到实例; selector是有效的属性

时间:2015-10-05 16:10:10

标签: ios objective-c ios9

注意:此崩溃仅发生在iOS 9

我有这个子类:

@interface PTSwitch : UIControl

@property (nonatomic) BOOL on;
@property (nonatomic) NSInteger identifier;

- (void)setOn:(BOOL)on animated:(BOOL)animated;

@end

当我尝试访问“标识符”属性时...

alertSwitch.on = YES;
alertSwitch.identifier = 1;

......我得到一个例外:

-[PTSwitch setIdentifier:]: unrecognized selector sent to instance

我已在调试器中验证该对象确实是我的子类。另外,正如您所看到的,在identifier之前调用的是on属性,可以毫无问题地访问该属性。

po alertSwitch
<PTSwitch: 0x1383620f0; baseClass = UISwitch; frame = (257 62; 51 31); alpha = 0.5; autoresize = RM+BM; tag = 666; layer = <CALayer: 0x136dd1800>>

po [alertSwitch class]
PTSwitch

修改

我刚注意到调试器似乎认为基类是UISwitch。我不知道为什么会这样,显然基类是UIControl。我对此没有任何解释,但怀疑它可能是相关的。

旁注,此崩溃开始发生在使用Xcode 7 for iOS 8构建的版本上,并且未重建以导致应用程序开始崩溃。

1 个答案:

答案 0 :(得分:1)

@rmaddy,这是一个非常有用的提示

我快速搜索了#34; PTSwitch&#34;在谷歌上找到了iOS 8.3+中对运行时头的引用。我不确定为什么我在iOS 9之前没有遇到此崩溃,但现在肯定已经解决了。

解决方案:将类重命名为PTSwitch以外的其他内容。