我收到了一封致命异常的崩溃报告:NSUnknownKeyException和SIGABRT ABORT 0x0000000181c582e8。我检查了我的故事板,以确保我没有坏的插座,我无法重现错误。因此,我认为崩溃的原因是内存不足。它发生的装置有14%的Ram Free。
以下是该报告称发生崩溃的代码。 “notes”是API响应中的关键。
if let notes = order.value(forKey: "notes") as? NSArray{
这是堆栈跟踪
答案 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错误,系统试图抓取一个不存在的对象参数。