背景
今天進(jìn)行項(xiàng)目的時(shí)候,原本正常運(yùn)行的項(xiàng)目 莫名的crash
了
解決這個(gè)問題的步驟:
- 查看控制臺(tái)拋出的錯(cuò)誤
大概意思是不能把
NSNull
轉(zhuǎn)換成NSString
沐祷,此時(shí)猜想應(yīng)該是返回?cái)?shù)據(jù)出現(xiàn)異常鸠信,果斷查看返回?cái)?shù)據(jù)
- 檢查返回?cái)?shù)據(jù)
解析數(shù)據(jù)
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: "當(dāng)前沒有網(wǎng)絡(luò)連接", delegate: self, cancelButtonTitle: "知道了吶~")
alert.show()
}
return
}
控制臺(tái)輸入:
po print(jsonDict)
果然發(fā)現(xiàn)了一些奇怪的東西
- 解決問題
查看問題代碼:
self.supplier = dic["supplier"] as! String
顯而易見這個(gè)變量需要保護(hù)纵寝,那么問題來了,怎么保護(hù)......
在Swift中星立,NSNull的官方說明為:
The NSNull class defines a singleton object used to represent null values in collection objects (which don’t allow nil values).
類NSNull 定義了一個(gè)單例對(duì)象爽茴,用于 一些不允許nil值 的對(duì)象 表示null值
想了一些保護(hù)方法:
// 錯(cuò)誤寫法
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
}
近段時(shí)間接手了一個(gè)Swift項(xiàng)目,正好依據(jù)項(xiàng)目來對(duì)Swift進(jìn)行一些列的學(xué)習(xí)與總結(jié)
不合適的地方還請(qǐng)指點(diǎn)~ 感激不盡
2016.09.19 晚