我收到 NSInvalidArgumentException*** -[__NSArrayM insertObject:atIndex:]: object cannot be nil
我的代码中第 1148 行的 Crashlytcs 异常,向您展示了我的代码的 1147-1149 行:
if(snapshot.stickerInfoForAnalitycs) {
[self.usedStickers addObject:snapshot.stickerInfoForAnalitycs];//1148 line
}
self.usedStickers
是 NSMutableArray
这怎么可能 ? (我知道 crashlitycs 有可能显示错误的行,但这不太可能,因为此崩溃出现在 9.20 版本的应用程序中,而在 9.24 版本中它仍在 1148 行中)。
UPD:stickerInfoForAnalitycs 是一个 NSString * 属性,没有 getter/setter 覆盖。声明为
@property (nonatomic) NSString * stickerInfoForAnalitycs;
最佳答案
根据您提供的代码片段,您确保 snapshot.stickerInfoForAnalitycs
不是 nil
在将其添加到 NSMutableArray
之前.
错误信息 -[__NSArrayM insertObject:atIndex:]
清楚地表明 self.usedStickers
不是 nil
实际上是 __NSArrayM
的一个实例,它是 NSMutableArray
的私有(private)子类类集群。正如预期的那样,这是正确的。
所以,我可以想出最有可能出现问题的场景——另一个线程修改了snapshot.stickerInfoForAnalitycs
。在 if
中测试后的值声明,但在它被插入到数组之前。
所以,我建议检查其他线程是否修改 stickerInfoForAnalytics
值(value)。使用启用的线程清理程序运行代码可能会有所帮助。见 https://developer.apple.com/documentation/code_diagnostics/thread_sanitizer/enabling_the_thread_sanitizer详情。请注意,thread sanitizer 是一个非常好的工具,但它仍然无法检测到所有可能的问题。因此,您仍然需要阅读您的代码并找到所有位置 stickerInfoForAnalitycs
值变了。
例如,另一种可能性是 - stickerInfoForAnalitycs
的自定义实现方法可能在第一次访问时返回正确的值,但 nil
在第二个。我认为这个选项不太可能。
关于ios - 不可能的 NSInvalidArgumentException - 尝试插入 nil 对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48948682/