Xcode 7,Obj-C,“Null传递给需要非null参数的被调用者”

时间:2015-06-27 11:15:34

标签: ios objective-c xcode cocoa-touch

在Xcode 7中,我收到了这个警告:

Null passed to a callee that requires a non-null argument

..来自NSMutableArray的这个nil初始化...

    sectionTitles = [[NSMutableArray alloc] initWithObjects:nil];

我发现我应该使用removeAllObjects代替。

    [sectionTitles removeAllObjects];

但是,这不允许我评估sectionTitles.count == 0。我确实尝试了sectionTitles == nil,但除非我使用iniWithObjects,否则我以后无法添加对象。

当我刷新数据源时,当没有记录时,我需要将数组设置为nil或0。除非我使用addObject,否则我似乎无法使用initWithObjects添加项目。

3 个答案:

答案 0 :(得分:19)

传递非空参数只是部分答案。

  

新的Objective-C可空性注释对于围栏的Swift端的代码有很大的好处,但即使没有编写一行Swift,这里也有很大的好处。标记为nonnull的指针现在将在自动完成期间给出提示,如果发送的是nil而不是正确的指针,则会发出警告。

阅读NSHipster comprehensive article

要想在自己的代码中使用相同的合同,请使用nonnullnullable

<强>的OBJ-C

- (nullable Photo *)photoForLocation:(nonnull Location *)location

答案 1 :(得分:16)

为什么不尝试:

<?php
    // write your select query
    $val = "data retrieved from php"
?>

或以下任何一项:

<div><?=$val?></div>

也许是一些愚蠢的:

sectionTitles = [[NSMutableArray alloc] init];

有很多方法可以创建空的可变数组。请阅读doc

答案 2 :(得分:-4)

使用零初始化NSMutableArray时出现相同的错误,

[[NSMutableArray alloc] initWithObjects:0, 0, 0, 0, 0, nil];

将其更改为

[NSMutableArray arrayWithArray:@[@0, @0, @0, @0, @0]];