【问题标题】:XCode how to check object is NULLXCode如何检查对象是否为NULL
【发布时间】:2015-06-11 17:37:32
【问题描述】:

我现在卡住了,我无法在 Objective C 中检查 Object 何时为 NULL。

当我从 _detail.CompanyImg 获取 vale 时,这是 NSLog 的结果。

_detail.CompanyImg text = (null)

接下来是检查对象是否为空。

if (_detail.CompanyImg &&  && [_detail.CompanyImg length] > 0) {

但即使这样尝试也遇到以下错误。

[NSNull 长度]:无法识别的选择器发送到实例 0x10bcaa4c0

【问题讨论】:

  • 你混淆了 NULL 和 nil 吗?尝试检查!= nil
  • 我已经用 nil 试过了,它不起作用。
  • CompanyImg 长度?那么它是一个字符串.. 命名错误..
  • @0yeoj 有关系吗?
  • 不,我只是第一眼就迷惑了..

标签: ios objective-c xcode


【解决方案1】:

对象_detail.CompanyImg 显然是NSNull 的一个实例,而不是严格意义上的nil。这是一种特殊情况,因为在 Objective-C 集合类中不可能保存空值,因此在必须表示它的情况下使用 NSNull 类。

如果您知道这是可能的,那么这将起作用:

if (!_detail.CompanyImg || _detail.CompanyImg == [NSNull null]) {
    // it's null
}

注意:NSNull 是一个特殊情况,它可以使用== 进行比较;通常你会使用isEqualisKindOfClass

【讨论】:

  • 遇到错误:'NSInvalidArgumentException',原因:'-[NSNull isEqualToString:]:无法识别的选择器发送到实例 0x10752f4c0'
  • @ppshein 这是同样的错误。该对象是NSNull,但它被视为NSString。在调用特定于字符串的方法之前,您需要检查其类型。
【解决方案2】:

您可以查看

if (object == (id)[NSNull null]) {
    //do something
}

if (object isEqual:[NSNull null]) {
    //do something
}

【讨论】:

  • 仍然遇到以下错误:[NSNull isEqualToString:]: unrecognized selector sent to instance 0x10687b4c0
  • 不要使用isEqualToString使用isEqual@ppshein
【解决方案3】:

nil 或 NULL 值不能按原样存储在 NSArrayNSDictionary 中。

您必须将其存储为特殊值[NSNull null]

JSON 解析器通常会将空值报告为 [NSNUll null]

[NSNull null] 是一个对象,所以[NSNull null] == nil 为 FALSE,[NSNull null] != nil 为 TRUE。

所以你应该试试:

if (_detail.CompanyImg && detail.CompanyImg != [NSNUll null] && [_detail.CompanyImg length] > 0) {
    // do your stuff
}

或者查看类:

if (_[detail.CompanyImg isKindOfClass:[NSString class]] && [_detail.CompanyImg length] > 0) {
    // do your stuff
}

【讨论】:

    【解决方案4】:

    这是我的检查完全没有错误。

    if (_detail.CompanyImg != [NSNull null]) {
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多