我正在从服务器打开一个标志,以确定要实例化的对象类型。每种类型都是返回类型的子类(Snack
在示例中为 )。我的猜测是整个子类与主要问题无关,但为了完整起见,我将其包括在内。
问题是我经常收到 Crashlyticscase "chips":
在线报告的崩溃。为了简化初始化程序中的解析,我将服务器响应包装在 SwiftyJSON 中JSON
。这一切都在测试中运行良好。
class func fromJSON(json: JSON) -> Snack {
switch json["SnackName"] {
case "chips": // CRASH OCCURS HERE
return BagOChips(json: json)
case "apple":
return Apple(json: json)
default:
return Spam(json: json)
}
}
具体来说,崩溃发生在“SwiftyJSON.swift:1013”(标记如下)。Crashlytics 将其描述为“EXC_BAD_ACCESS KERN_INVALID_ADDRESS at 0x0000000093a4bec8”和“swift_unknownRetain + 32”。
public func ==(lhs: JSON, rhs: JSON) -> Bool {
switch (lhs.type, rhs.type) {
case (.Number, .Number):
return (lhs.object as NSNumber) == (rhs.object as NSNumber)
case (.String, .String):
return (lhs.object as String) == (rhs.object as String) // CRASH REALLY OCCURS HERE
case (.Bool, .Bool):
return (lhs.object as Bool) == (rhs.object as Bool)
case (.Array, .Array):
return (lhs.object as NSArray) == (rhs.object as NSArray)
case (.Dictionary, .Dictionary):
return (lhs.object as NSDictionary) == (rhs.object as NSDictionary)
case (.Null, .Null):
return true
default:
return false
}
}
知道为什么这会失败以及在我们的下一个版本中我可以做些什么来纠正它吗?