[__NSCFBoolean值]:无法识别的选择器已发送到实例

时间:2018-10-18 19:43:38

标签: ios objective-c

我在Objective-C中有一个模型,其变量如下:

@property (nullable, nonatomic, strong) id value;

由于泛型类型,该变量可以包含各种类型的值,包括NSString,NSNumber和Bool。

现在,由于某种原因,下面的代码:

[model.value isKindOfClass:[NSNull class]];

崩溃。崩溃中的消息就是我在标题中提到的内容。该崩溃很少能重现,但是导致我的大量用户面临崩溃(Crashlytics报告)。

有什么想法可能会发生这种情况吗?

1 个答案:

答案 0 :(得分:1)

  

由于泛型类型,该变量可以包含各种类型的值,包括NSString,NSNumber和Bool。

我不知道您的意思是“由于泛型类型”。而且我也不知道您所说的布尔不是B型,而是Objective-C类型。您可能是布尔或布尔或布尔。

但是,不可能将{em> any 布尔值的布尔值分配给id属性,因为id是对象,而布尔值是标量。我认为这可能发生的唯一方法是,如果这是非ARC文件;在ARC下,编译器会阻止您。

一种可能性是这是一个非ARC文件,您在这里犯了一个可怕的错误,试图将id视为可以容纳标量。

但是,让我们忽略它,因为错误表明它是model,而不是它的value属性,这就是问题所在。

一个更隐蔽的可能性是您遇到了线程/内存管理问题,并且model指针悬空了,使您完全指向其他内容。您无法自己重现此事实表明存在这种情况。这样的问题很难找到,尤其是当崩溃只是诊断早些时候已经发生的问题时。