Nil NSString方法

时间:2012-08-30 14:49:12

标签: objective-c nsstring

我有一个存储在Core Data中的NSString。它是可选的,我相信在sqlite db中它意味着它可以为null。我有一个方便的方法,我在这里显示'isEmptyOrWhitespace':

- (BOOL)isEmptyOrWhiteSpace {
    return self == nil ||
    self.length == 0 ||
    [self stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]].length == 0;
}

当我的Core Data中的字符串为nil时,似乎没有调用此方法,即断点从未被命中。这特别令人讨厌,因为像这样的代码块:

if(![string isEmptyOrWhitespace]) {
    [string doSomething];
}
如果string为nil,则运行

doSomething,显然不是我的意图。有没有办法解决这个问题,而不是在调用方法之前检查我的字符串是否为nil?或者这是Objective-C的“特性”,方法不能在nil对象上运行吗?

2 个答案:

答案 0 :(得分:3)

如果stringnil,则[string isEmptyOrWhitespace]不执行任何操作,因为向nil发送消息是无操作。

编辑:正如@Jim指出的那样,这个答案是不正确的。 [nil isEmptyOrWhitespace]会返回0,这就是if ()无法执行string = nil阻止的真正原因。

答案 1 :(得分:-1)

马丁的回答是准确的。您需要的是核心数据实体类的便捷方法,以验证该字符串的长度。如果字符串为nil,则长度为零,您可以知道它是空的还是零。