NSJSONSerialization 没有返回错误
Posted
技术标签:
【中文标题】NSJSONSerialization 没有返回错误【英文标题】:NSJSONSerialization no returns error 【发布时间】:2014-07-13 18:28:31 【问题描述】:有代码:
var err: NSError
var jsonDict = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers, error: &err) as Array<NSDictionary>
如果数据有 JSON,它就完美了。但是,如果还有其他东西(不是 JSON 数组),它只会出现致命错误,并且 ios 模拟器会以 EXC_BAD_INSTRUCTION 关闭。
所以没有电话err
。我之前如何查看data
?或者抓住错误。
【问题讨论】:
只要 NSData 操作数确实是 NSData,JSONObjectWithData 操作就不会产生异常。您得到的是 NSArray 还是 NSDictionary(或 nil)取决于 JSON 字符串中的内容。 【参考方案1】:(对不起,我赶时间,暂无描述。)
var err: NSError?
var jsonDict: AnyObject!
var data: AnyObject = " ".dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)
if let d = data as? NSData
jsonDict = NSJSONSerialization.JSONObjectWithData(d, options: NSJSONReadingOptions.MutableContainers, error: &err)
if let dict = jsonDict as? NSDictionary
// Do something with `dict`
println(dict)
【讨论】:
NSJSONSerialization 应该返回类型。在我的示例中是:ArrayAnyObject!
,因为在编译时您无法知道是否会返回字典或数组(或字符串?)。您必须在运行时检查(并转换)。【参考方案2】:
这可能是因为 JSONObjectWithData 被声明为返回 id,但实际上它返回 NSDictionary*、NSArray* 或 nil - 在 Swift 中,将 nil 分配给 id 类型的变量会因设计而崩溃。你需要给 jsonDict 一个类型,可能是一个可选的 NSMutableDictionary* 或 NSMutableArray*。
【讨论】:
在我的示例中它不会是 NSMutableDictionary 或 NSMutableArray。你能给你的吗? 看看你的电话。你要求可变容器。因此它将返回一个可变容器,而不是不可变容器。你要求可变,你得到可变。如果出现错误,则为 nil。以上是关于NSJSONSerialization 没有返回错误的主要内容,如果未能解决你的问题,请参考以下文章
NSJSONSerialization 返回 null - Objective-c
使用 NSJSONSerialization 将 NSMutableDictionary 转换为 JSON 会返回不同的结果
使用 NSDictionary 访问 NSJSONSerialization 数据
NSJSONSerialization生成NSCFString *和NSTaggedPointerString *