在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
添加项目。
答案 0 :(得分:19)
传递非空参数只是部分答案。
新的Objective-C可空性注释对于围栏的Swift端的代码有很大的好处,但即使没有编写一行Swift,这里也有很大的好处。标记为
nonnull
的指针现在将在自动完成期间给出提示,如果发送的是nil而不是正确的指针,则会发出警告。
阅读NSHipster comprehensive article。
要想在自己的代码中使用相同的合同,请使用nonnull
或nullable
:
<强>的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]];