我有一个存储在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对象上运行吗?
答案 0 :(得分:3)
如果string
为nil
,则[string isEmptyOrWhitespace]
不执行任何操作,因为向nil
发送消息是无操作。
编辑:正如@Jim指出的那样,这个答案是不正确的。 [nil isEmptyOrWhitespace]
会返回0
,这就是if ()
无法执行string = nil
阻止的真正原因。
答案 1 :(得分:-1)
马丁的回答是准确的。您需要的是核心数据实体类的便捷方法,以验证该字符串的长度。如果字符串为nil,则长度为零,您可以知道它是空的还是零。