Xcode 7,Obj-C,“空传递给需要一个非空参数的被调用者”
在Xcode 7中,我得到这个警告:
Null passed to a callee that requires a non-null argument
..从这个零的NSMutableArray的初始化…
sectionTitles = [[NSMutableArray alloc] initWithObjects:nil];
我发现我应该使用removeAllObjects
。
[sectionTitles removeAllObjects];
但是,这不允许我评估sectionTitles.count == 0
。 我没有尝试iniWithObjects
sectionTitles == nil
,但是除非我使用iniWithObjects
我不能以后添加对象。
我需要将数组设置为零或零,当我刷新我的数据源时,当没有logging。 我似乎无法使用addObject
添加项目,除非我已经使用initWithObjects
。
你为什么不尝试:
sectionTitles = [[NSMutableArray alloc] init];
或以下任何一项:
sectionTitles = [[NSMutableArray alloc] initWithCapacity:sectionTitles.count]; sectionTitles = [NSMutableArray new]; sectionTitles = [NSMutableArray array]; sectionTitles = [NSMutableArray arrayWithCapacity:sectionTitles.count];
也许有些愚蠢的:
sectionTitles = [NSMutableArray arrayWithArray:@[]]; sectionTitles = [@[] mutableCopy];
有很多方法来创build空的可变数组。 只要阅读文档 。
传递非空参数只是部分答案。
新的Objective-C可空性注释对围栏Swift一侧的代码有很大的好处,但是即使不写一行Swift,也有很大的收获。 标记
nonnull
指针现在将在自动完成期间给出提示,并且如果发送nil而不是正确的指针,则会产生警告。
阅读NSHipster 综合文章 。
为了在自己的代码中利用相同的合约,请使用nonnull
nullable
或nullable
:
OBJ-C
- (nullable Photo *)photoForLocation:(nonnull Location *)location
初始化一个NSMutableArray零时得到相同的错误,
[[NSMutableArray alloc] initWithObjects:0, 0, 0, 0, 0, nil];
改成了
[NSMutableArray arrayWithArray:@[@0, @0, @0, @0, @0]];