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