在Objective-C中检查空字符串的正确方法是什么?

Teo*_*ing 179 cocoa-touch objective-c ios

我在我的iPhone应用程序中使用它

if (title == nil) {
    // do something
}
Run Code Online (Sandbox Code Playgroud)

但它抛出一些异常,控制台显示标题为"(null)".

所以我现在正在使用它:

if (title == nil || [title isKindOfClass:[NSNull class]]) {
    //do something
}
Run Code Online (Sandbox Code Playgroud)

有什么区别,确定字符串是否为空的最佳方法是什么?

Pet*_*wis 390

正如其他人所指出的那样,在Cocoa/Objective C下有很多种"null".但还有一点需要注意的是,[title isKindOfClass:[NSNull class]]是无意义复杂的,因为[NSNull null]被记录为单身,这样你就可以检查指针是否相等.请参阅Cocoa主题:使用Null.

所以一个好的测试可能是:

if (title == (id)[NSNull null] || title.length == 0 ) title = @"Something";
Run Code Online (Sandbox Code Playgroud)

注意如何使用即使title为nil,title.length将返回0/nil/false,在这种情况下为0,因此您不必特殊情况.这是对Objective C的新手很难习惯的东西,特别是来自其他语言的消息/方法调用nil崩溃.


Blu*_*ame 25

它就是这么简单

if([object length] >0)
{
  // do something
}
Run Code Online (Sandbox Code Playgroud)

记住,在Objective C中,如果object为null,则返回0作为值.

这将为您提供空字符串和0长度字符串.

  • 如果object是NSNull,这将无法工作,仍然需要先显式检查. (48认同)
  • 您还可以为NSNull创建一个类别,使其返回0到长度消息:) (6认同)

Tim*_*imM 6

请参阅本网站上的以下相关文章:

我认为您的错误与其他内容有关,因为您不需要进行额外检查.

另请参阅此相关问题:正确检查nil sqlite文本列


nen*_*hev 5

什么是所有这些"适合我的答案"?我们都用相同的语言和规则进行编码

  1. 确保参考不是
  2. 检查并确保字符串的长度不为0

这对所有人都有用.如果给定的解决方案仅"适合您",那只是因为您的应用程序流不允许引用可能为null或字符串长度为0的情况.执行此操作的正确方法是将处理的方法在所有情况下你想要什么.

  • 如果引用是*`nil`*(注意:不是"null"),那么发送一条消息,比如`length`,将产生0(或者该方法的返回类型的适当的0值)._那是语言的规则.在这种情况下,无需单独检查"nil". (4认同)

Gua*_*ius 5

我发现,为了真正做到正确,你最终必须做类似的事情

if ( ( ![myString isEqual:[NSNull null]] ) && ( [myString length] != 0 ) ) {
}
Run Code Online (Sandbox Code Playgroud)

否则你会遇到奇怪的情况,控制仍会绕过你的检查.我没有遇到一个让它通过isEqual长度检查.