ios - 不可能的 NSInvalidArgumentException - 尝试插入 nil 对象?

标签 ios objective-c crash nsmutablearray

我收到 NSInvalidArgumentException*** -[__NSArrayM insertObject:atIndex:]: object cannot be nil我的代码中第 1148 行的 Crashlytcs 异常,向您展示了我的代码的 1147-1149 行:

if(snapshot.stickerInfoForAnalitycs) {
    [self.usedStickers addObject:snapshot.stickerInfoForAnalitycs];//1148 line
}
self.usedStickersNSMutableArray
这怎么可能 ? (我知道 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/

相关文章:

objective-c - 在 Objective-C 中拦截方法调用

c++ - 通过属性 getter 访问 std::map 返回垃圾值

ios - 我想从 swift4.0 中的数组中提取 District_NameEng (字典值)

ios - 在 View 中随机分布标签

ios - 从 iPhone 上的 NSString 中删除 HTML 标签

objective-c - 将 Objective-C 指针类型 'NSString *' 转换为 C 指针类型 'CFStringRef' (又名 'const struct __CFString *' )需要桥接转换

ios - Parse.com 在 iOS 7.0 上的基本项目崩溃

excel - 嵌套循环导致Excel崩溃

java - Android 设备离线崩溃报告器离线

ios - 重命名 Xcode 应用程序时向 Sigabrt 发出信号