后臺數據的特殊情況
iOS開發(fā)中可能遇到的后臺錯誤數據一般有兩種 <null> 以及 (null)
- 數據返回流程: 1.Sql從數據庫獲取數據 2.拼接哈希數組 3.返回response
<null>: 之所以獲取此種數據, 問題出在數據返回流程的第一步, 后臺返回的對應數據是空值或默認值, 這是因為后臺數據庫中的數據是默認值, 或者 根本就沒有設置數據庫默認值導致的, 因此, 這樣的數據在 json 解析之后因為可以找到 key , 但是 value 卻沒有值, 從而導致對應的模型屬性指針內容為空, 也就是 <null> 對象, 大概意思就是, 因為 json 數據中對應 key 是存在的, 但是 value 沒有值, 所以, json 解析的時候, 會將 value 作為 null 對象處理, 此時, 對應模型的屬性的指針是有值的, 指向的內存空間中存儲著類型為 null的對象, 如果打印出來, 那么, 應該是 <null> 形式的字符串, 如果對它發(fā)函數消息, 那么因為找不到具體實現, 程序就會崩潰.
(null) / nil / Nil / NULL : 之所以獲取此種數據, 問題出在數據返回流程的第二步, 不論數據庫中是否有對應的數據, 如果后臺在拼接哈希數組的時候根本沒有拼進去對應的 key, 那么在獲取到具體數據并且進行 json 解析之后, 對應的字典中是不存在模型屬性對應的 key 值的, 因此, 執(zhí)行 setValuesForkey 函數時對應的屬性的指針根本不會被賦值, 因此, 指針的內部應該是 0x00, 也就是 nil 之類的形式, 如果打印出來, 應該是(null), 此時, 如果使用 nil 對象調用函數或者向 nil 發(fā)送函數消息, 都不會崩潰, 最后, 如果想要判斷值是否為 nil, 因為 nil == 0x00, 為具體的數值, 因此, 直接判斷 ?? == nil 即可.