从分析器中获取 "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-nil
和 non-empty
和 NSString
的最简单方法是获取 length
。它 returns nil
和 empty
的 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
我遇到过 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-nil
和 non-empty
和 NSString
的最简单方法是获取 length
。它 returns nil
和 empty
的 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