背景
今天进行项目的时候,原本正常运行的项目 莫名的crash
了
解决这个问题的步骤:
- 查看控制台抛出的错误
大概意思是不能把
NSNull
转换成NSString
,此时猜想应该是返回数据出现异常,果断查看返回数据
- 检查返回数据
解析数据
guard let jsonDict = try? NSJSONSerialization.JSONObjectWithData(respdata!, options: .AllowFragments) else {
activity.stopAnimating()
cartview.headerEndRefreshing()
dispatch_async(dispatch_get_main_queue()) {
let alert = UIAlertView(title: "提示", message: "当前没有网络连接", delegate: self, cancelButtonTitle: "知道了呐~")
alert.show()
}
return
}
控制台输入:
po print(jsonDict)
果然发现了一些奇怪的东西
- 解决问题
查看问题代码:
self.supplier = dic["supplier"] as! String
显而易见这个变量需要保护,那么问题来了,怎么保护......
在Swift中,NSNull的官方说明为:
The NSNull class defines a singleton object used to represent null values in collection objects (which don’t allow nil values).
类NSNull 定义了一个单例对象,用于 一些不允许nil值 的对象 表示null值
想了一些保护方法:
// 错误写法
self.supplier = dic["supplier"] as! String
if ((dic["goods_type"]?.isEqual(NSNull.init())) == false){
self.goods_type = dic["goods_type"] as! String
}
if ((dic["supplier"]?.isEqual(NSNull.init())) == false) {
self.supplier = dic["supplier"] as! String
}
if ((dic["supplier"]?.isEqual(NSNull())) == false) {
self.supplier = dic["supplier"] as! String
}
if (!((dic["supplier"]?.isEqual(NSNull()))!)) {
self.supplier = dic["supplier"] as! String
}
if !(dic["supplier"] is NSNull) {
self.supplier = dic["supplier"] as! String
}
近段时间接手了一个Swift项目,正好依据项目来对Swift进行一些列的学习与总结
不合适的地方还请指点~ 感激不尽
2016.09.19 晚