iOS Crashlytics 崩溃报告内存不足

iOS Crashlytics crash report low memory

我收到了包含致命异常的崩溃分析报告:NSUnknownKeyException 和 SIGABRT ABORT 0x0000000181c582e8。我检查了我的故事板以确保我没有坏的插座并且我无法重现错误。因此,我认为崩溃是由于内存不足而发生的。发生它的设备有 14% Ram Free。

这是报告称发生崩溃的行中的代码。 "notes" 是 API 响应中的一个键。

if let notes = order.value(forKey: "notes") as? NSArray{

这是堆栈跟踪

你的问题是你试图访问 order 的 notes 参数,但在这种情况下 order 是一个 NSCFBoolean(@YES 或 @NO,NSCFBoolean 基本上是一个 NSNumber ). NSCFBoolean 或 NSNumber 有一个 notes 参数来访问是没有意义的。

您正在崩溃,因为您试图访问不存在的参数。您可能假设 order 是一个特定的对象,但不知何故它最终变成了不同的东西。发生这种情况的原因有很多,但在 Swift 中可能归结为假设该变量是其他类型。

我注意到您的代码在 Swift 中,但错误的重要部分在 Objective-C 中读起来更好。

您的第一个屏幕截图中的错误是:

Fatal Exception: NSUnknownKeyException [<__NSCFBoolean 0x1b...> valueForUndefinedKey:]: this class is not key-value coding compliment for the key notes

这就是说,将 valueForUndefinedKey: 消息(类似于 Swift 函数)发送到位于内存位置的 Bool:0x1b...

在Objective-C中,可以通过这种方式通过Key Value Observation (KVO)访问对象参数。

然而,在这种情况下,它 returns 一个异常,或者基本上是一个以崩溃结束的 NSError,因为这个键不存在。

我希望这有助于解释问题,这是我在不直接看到您的代码的情况下所能做的最好的。它与低内存无关,而是系统试图获取不存在的对象参数的 KVO 错误。