我从静态分析器中收到此错误:
这是代码:
API滥用(Apple) - 词典不能为零
- (NSString *)description
{
return [@{@"filePath": self.filePath,
@"fileName": self.fileName,
@"fileAttributes": self.fileAttributes,
@"creationDate": self.creationDate,
@"modificationDate": self.modificationDate,
@"fileSize": @(self.fileSize),
@"age": @(self.age),
@"isArchived": @(self.isArchived)} description];
}
任何人都可以说出问题是什么吗?
答案 0 :(得分:3)
这段代码看起来像是旧版Lumberjack的DDFileLogger.m
如果字典中的项目为nil,则通过插入默认空字符串来消除警告 - > https://github.com/CocoaLumberjack/CocoaLumberjack/pull/127/files
return [@{@"filePath": (self.filePath ?: @""),
@"fileName": (self.fileName ?: @""),
@"fileAttributes": (self.fileAttributes ?: @""),
@"creationDate": (self.creationDate ?: @""),
@"modificationDate": (self.modificationDate ?: @""),
@"fileSize": @(self.fileSize),
@"age": @(self.age),
@"isArchived": @(self.isArchived)} description];
答案 1 :(得分:2)
您的任何一个值都保证为nil,或者您的某个值不是对象指针,因为以下代码根本不会产生错误:
- (NSString *)description
{
return [@{@"filePath": @"",
@"fileName": @"",
@"fileAttributes": @"",
@"creationDate": @"",
@"modificationDate": @"",
@"fileSize": @"",
@"age": @"",
@"isArchived": @""} description];
}
答案 2 :(得分:1)
这可能是由于我们实施了一个属性的getter:
- (id)myLazyPropery
{
if (featureDisabled) return nil;
// ...
return _myLazyPropery;
}
以下任何一项都会触发API滥用警告:
@{self.myLazyProperty}
@[self.myLazyProperty]
[myMutableArray addObject:self.myLazyProperty]
这可以通过使用接受nil
值的方法来解决,例如我们arrayWithObject:
。
分析器太糟糕了,并没有将吸气剂指向问题的根源。
它也不会与if (self.myProperty){@[self.myLazyProperty]}
或self.myProperty ? @[self.myProperty] : @[]
保持沉默,我认为这是一个错误。
答案 3 :(得分:0)
分析器说你的一个字典项值可能是零。只需检查if(!someValue) {// handle nil here, by adding a null object, empty string, returning, etc. }
,这将使警告变得安静。