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

后台数据的特殊情况

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

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

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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,948评论 18 139
  • Spark SQL, DataFrames and Datasets Guide Overview SQL Dat...
    Joyyx阅读 8,349评论 0 16
  • 一、深复制和浅复制的区别? 1、浅复制:只是复制了指向对象的指针,即两个指针指向同一块内存单元!而不复制指向对象的...
    iOS_Alex阅读 1,424评论 1 27
  • ———————————————回答好下面的足够了---------------------------------...
    恒爱DE问候阅读 1,759评论 0 4
  • 早晨,着急送晴上学的时候,晴却郑重地跟我说了件“大”事。 “妈妈,你知道,我过生日没请YHM,果然出大事了。” “...
    真冉阅读 277评论 4 2