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 nullablenullable

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]];