后台返回数据--(null)-nil

后台数据的特殊情况

iOS开发中可能遇到的后台错误数据一般有两种 以及 (null)

  • 数据返回流程: 1.Sql从数据库获取数据 2.拼接哈希数组 3.返回response
  1. : 之所以获取此种数据, 问题出在数据返回流程的第一步, 后台返回的对应数据是空值或默认值, 这是因为后台数据库中的数据是默认值, 或者 根本就没有设置数据库默认值导致的, 因此, 这样的数据在 json 解析之后因为可以找到 key , 但是 value 却没有值, 从而导致对应的模型属性指针内容为空, 也就是 对象, 大概意思就是, 因为 json 数据中对应 key 是存在的, 但是 value 没有值, 所以, json 解析的时候, 会将 value 作为 null 对象处理, 此时, 对应模型的属性的指针是有值的, 指向的内存空间中存储着类型为 null的对象, 如果打印出来, 那么, 应该是 形式的字符串, 如果对它发函数消息, 那么因为找不到具体实现, 程序就会崩溃.

  2. (null) / nil / Nil / NULL : 之所以获取此种数据, 问题出在数据返回流程的第二步, 不论数据库中是否有对应的数据, 如果后台在拼接哈希数组的时候根本没有拼进去对应的 key, 那么在获取到具体数据并且进行 json 解析之后, 对应的字典中是不存在模型属性对应的 key 值的, 因此, 执行 setValuesForkey 函数时对应的属性的指针根本不会被赋值, 因此, 指针的内部应该是 0x00, 也就是 nil 之类的形式, 如果打印出来, 应该是(null), 此时, 如果使用 nil 对象调用函数或者向 nil 发送函数消息, 都不会崩溃, 最后, 如果想要判断值是否为 nil, 因为 nil == 0x00, 为具体的数值, 因此, 直接判断 ?? == nil 即可.

你可能感兴趣的:(后台返回数据--(null)-nil)