我在我的iPhone应用程序中使用它
if (title == nil) { // do something }
但它抛出一些异常,控制台显示标题为"(null)".
所以我现在正在使用它:
if (title == nil || [title isKindOfClass:[NSNull class]]) { //do something }
有什么区别,确定字符串是否为空的最佳方法是什么?
正如其他人所指出的那样,在Cocoa/Objective C下有很多种"null".但还有一点需要注意的是,[title isKindOfClass:[NSNull class]]是无意义复杂的,因为[NSNull null]被记录为单身,这样你就可以检查指针是否相等.请参阅Cocoa主题:使用Null.
所以一个好的测试可能是:
if (title == (id)[NSNull null] || title.length == 0 ) title = @"Something";
注意如何使用即使title为nil,title.length将返回0/nil/false,在这种情况下为0,因此您不必特殊情况.这是对Objective C的新手很难习惯的东西,特别是来自其他语言的消息/方法调用nil崩溃.
它就是这么简单
if([object length] >0) { // do something }
记住,在Objective C中,如果object为null,则返回0作为值.
这将为您提供空字符串和0长度字符串.
请参阅本网站上的以下相关文章:
是否(变量)与Objective-C h中的if(变量!= nil)相同
我认为您的错误与其他内容有关,因为您不需要进行额外检查.
另请参阅此相关问题:正确检查nil sqlite文本列
什么是所有这些"适合我的答案"?我们都用相同的语言和规则进行编码
确保参考不是零
检查并确保字符串的长度不为0
这对所有人都有用.如果给定的解决方案仅"适合您",那只是因为您的应用程序流不允许引用可能为null或字符串长度为0的情况.执行此操作的正确方法是将处理的方法在所有情况下你想要什么.
我发现,为了真正做到正确,你最终必须做类似的事情
if ( ( ![myString isEqual:[NSNull null]] ) && ( [myString length] != 0 ) ) { }
否则你会遇到奇怪的情况,控制仍会绕过你的检查.我没有遇到一个让它通过isEqual
长度检查.