一个NSOperationQueue错误我试图从Crashlytics中弄清楚

时间:2016-09-22 02:28:47

标签: ios iphone swift ios10

今天早上我在Crashlytics上遇到了这个错误,我无法确定问题所在。得到你的意见真是太棒了。我认为它很可能是一个多线程问题。但我无法准确指出它是什么。

enter image description here

编辑:我挖得更深一点,这是失败的代码:

另外,我发现错误是:

无法将'__NSSingleObjectArrayI'(0x1aa60bca0)类型的值转换为'NSMutableArray'(0x1aa60bd90)。 2016-09-22 08:29:34.136764 GrabbnGo [4204:822290]无法将'__NSSingleObjectArrayI'(0x1aa60bca0)类型的值转换为'NSMutableArray'(0x1aa60bd90)。

这一切都完美无缺,而且它突然导致问题,应用程序已经在商店上了:/

json = try NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions()) as? [String: AnyObject]
            let str = NSString(data: data!, encoding: NSUTF8StringEncoding)
            print(str)
            let OrderDictionary = json as NSDictionary
            let result = OrderDictionary.objectForKey("result") as! NSMutableArray

1 个答案:

答案 0 :(得分:1)

好的,这种方式有一个独特的答案。基本上,你是在滥用NSJSONSerialization,这是一个时间炸弹错误,最终会让你陷入困境。

根据文件:

https://developer.apple.com/reference/foundation/jsonserialization

  

所有对象都是NSString,NSNumber,NSArray,NSDictionary或NSNull的实例。

这是一个非常简单明了的句子。你应该尊重它。它没有说明NSMutableArray,只有NSArray。 JSON解析器正在使用它所选择的NSArray的任何兼容(子类)对象。如果数组中只有一个项目,那么内部类型__NSSingleObjectArray似乎效率更高,可能在速度和内存方面都有效。

服务器(或客户行为)几乎肯定会发生变化,现在result(通常?有时?总是?)只有1项,所以JSON解析器做出了不同的选择不应该关心。

您需要做的就是将其更改为NSArray并根据需要构建NSMutableArray

let myJSONParsedArray: NSArray = ...
let myMutableArray = NSMutableArray(myJSONParsedArray)

但首先要了解为什么强行展开是如此危险,特别是在网络代码环境中,当你完全不信任任何数据时,关于类型,价值和恶意,永远都是!!