【问题标题】:NSString contains : <null> and is crashing my appNSString 包含:<null> 并且正在使我的应用程序崩溃
【发布时间】:2011-05-02 16:32:42
【问题描述】:

我有一个由 JSON 返回的一些数据填充的 NSString。

代码在正常情况下运行良好,但有时我会被 JSON 返回。

当我检查我的 NSString == nil 或 == null 时,它未通过测试。

但是 NSString 包含的事实使我的应用程序崩溃。

那么在Objective C中有什么特殊含义吗?或者我应该只做一个字符串比较,看看字符串是否等于而不是 nil 并以这种方式处理它。

这让我有点困惑。

非常感谢, 代码

【问题讨论】:

  • 你能发布你的相关代码吗?看看发生了什么可能会有所帮助。

标签: iphone objective-c


【解决方案1】:

&lt;null&gt;NSNull 为其 -description 方法返回的内容。您还需要检查

myString == [NSNull null]

在这种情况下。

附加信息:IIRC 常见的 Objective-C JSON 内容将在 JSON 结构中使用 [NSNull null] 代替 nulls,以区分值与根本不存在的值。

【讨论】:

  • +1。更具体地说,集合类(如字典和数组)不能保存 nil 对象,因此使用[NSNull null] 作为占位符。
  • 你为什么认为这是关于NSNull 和一个集合?帖子中都没有提到; OP正在谈论NSString,并记录一个nil的对象(字符串或非字符串)打印(null)
  • 因为它不是真正的 NSString!
  • 我之前也遇到过这个问题。
  • 应该是一个NSString,当然,但是很多东西使用NSNull作为“null但存在”的占位符。还有,(null)&lt;null&gt;不一样!
【解决方案2】:

NSString * 只是一个指向NSString 对象的指针。
测试空指针:

NSString *str;

if (str) {
    // str points to an object
    if ([str length] == 0) {
        // string is empty
    }
} else
    // str points to nothing
}

如果要检查空格,可以使用stringByTrimmingCharactersInSet 修剪 NSString。

【讨论】:

  • 一般来说,在调用length 之类的方法之前不应检查nil,因为如果strnil[str length] 将返回0。
  • @Jon Reid:这没有意义。如果你只检查长度,你最终会假设你有一个有效但为空的字符串对象,这可能会在以后引起问题。
【解决方案3】:

您可以检查它是否为空。

if ([str isKindOfClass:[NSNull class]]) {
   // str is null.
}

【讨论】:

  • NSNull 不是这样工作的。如果str nil,这会给你一个布尔值false,但那是因为你正在向nil发送一条消息,它什么都不做。
【解决方案4】:

我是这样做的:

if([string isKindOfClass:[NSNull class]]) {
    NSLog(@"This is JSON null");
} else {
    NSLog(@"This is a string, do what you wanna do with it");
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-27
    相关资源
    最近更新 更多