0

我有一个NSString存储在核心数据中的。它是可选的,我相信 sqlite db 意味着它可以为空。我有一个方便的方法,我称之为“isEmptyOrWhitespace”,如下所示:

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

当我的核心数据字符串为零时,它似乎没有调用这个方法,也就是说断点永远不会被命中。这特别烦人,因为像这样的代码块:

if(![string isEmptyOrWhitespace]) {
    [string doSomething];
}

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

4

2 回答 2

3

如果stringnil,则[string isEmptyOrWhitespace]什么也不做,因为向其发送消息nil是无操作的。

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

于 2012-08-30T14:51:27.137 回答
-1

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

于 2012-08-30T14:54:12.280 回答