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



我有一个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); 
}

您必须向分析器显示每个可能的逻辑路径,这是正确的。你的"变通办法"非常好。

可能是您的isEmpty可以被编写以帮助分析器,但您没有显示,所以不可能说。根据您实际展示的内容,我建议您使用您的"变通方法"并继续前进。

在Objective-C中,检查non-nilnon-emptyNSString最简单的方法是获得length。对于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

相关内容