iOS Crashlytics崩溃报告内存不足

时间:2018-03-23 03:37:07

标签: ios memory crashlytics

我收到了一封致命异常的崩溃报告:NSUnknownKeyException和SIGABRT ABORT 0x0000000181c582e8。我检查了我的故事板,以确保我没有坏的插座,我无法重现错误。因此,我认为崩溃的原因是内存不足。它发生的装置有14%的Ram Free。

以下是该报告称发生崩溃的代码。 “notes”是API响应中的关键。

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

这是堆栈跟踪

enter image description here

enter image description here

1 个答案:

答案 0 :(得分:2)

您的问题是您正在尝试访问 SELECT TRANSNUM AS Invoice_Num, SUM(DAMOUNT) AS Total_Tax from DETAIL d JOIN TRANS t on t.ID = d.ID where d.POSTDATE= '2018-01-01' and t.type=6 and d.ACCT =52 GROUP BY TRANSNUM ORDER BY TRANSNUM SELECT TRANSNUM AS Invoice_Num, SUM(DAMOUNT) AS Total_of_Items from DETAIL d JOIN TRANS t on t.ID = d.ID where d.POSTDATE= '2018-01-01' and t.type=6 and d.ACCT !=52 GROUP BY TRANSNUM ORDER BY TRANSNUM 的notes参数,但在这种情况下order是NSCFBoolean(@YES或@NO,NSCFBoolean基本上是NSNumber)。 NSCFBoolean或NSNumber具有要访问的notes参数是没有意义的。

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

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

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

order

这就是说,将Fatal Exception: NSUnknownKeyException [<__NSCFBoolean 0x1b...> valueForUndefinedKey:]: this class is not key-value coding compliment for the key notes消息(如Swift函数)发送到位于内存位置的Bool:0x1b ...

在Objective-C中,可以通过键值观察(KVO)以这种方式访问​​对象参数。

但是,在这种情况下,它会返回一个异常,或者基本上是一个以崩溃结束的NSError,因为该密钥不存在。

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