从分析器中获取 "Array element cannot be nil" 作为误报

Getting "Array element cannot be nil" from Analyzer as a false-positive

我遇到过 XCode 分析器标记有效代码的情况。

我们有一个 NSString 类别,其方法 isEmpty 检查字符串是否为空,包括检查 nil 字符串。当它与将字符串添加到数组结合使用时,分析器会抱怨:

if (![NSString isEmpty:myString]) {
    [_myArray addObject:myString];
}

然后分析器将向 Array element cannot be nil 抱怨,因为它不够智能,无法检测到 isEmpty 正在阻止它。

最好的解决方法是什么?我知道我可以将条件更改为 if (myString && ![NSString isEmpty... 但这似乎是一个笨拙的解决方法。

编辑:应要求,这是 isEmpty 的正文:

+ (BOOL)isEmpty:(NSString *)string
{
    return (string ? [string isEqualToString:@""] : YES); 
}

您说得对,您必须向分析器显示每条可能的逻辑路径。你的"workaround"非常好。

可能你的isEmpty可以写出来对分析器有更多的帮助,但是你没有表现出来,所以不好说。根据您实际展示的内容,我建议您只使用 "workaround" 并继续。

在 Objective-C 中,检查 non-nilnon-emptyNSString 的最简单方法是获取 length。它 returns nilempty 的 0 以及 non-empty 的正确长度。

NSString *testNil = nil;
NSString *testEmpty = @"";
NSString *testNonEmpty = @"Hello";

NSInteger testNilLength = [testNil length]; // -> 0
NSInteger testEmptyLength = [testEmpty length]; // -> 0
NSInteger testNonEmptyLength = [testNonEmpty length]; // -> 5