如何将“nil”值插入绑定到tableview的数组中?

时间:2012-05-12 18:32:56

标签: objective-c nsarray

我想提一些关于一件事的提示:

在绑定到tableview列的数组中,我有一些数值(浮点)值。使用标记为“0”,“1”,“2”等界面按钮输入(放入数组)这些值。还有一个“C”按钮可以取消输入。

后来,我对这个数组进行了一些计算。如果没有输入结果,则数组的对象不能为0.“无值”当然更好地用“nil”表示...但是不允许将nil对象插入数组(nil表示“数组末尾”)。 / p>

NSArray包含对象。也就是说,这里,这些对象必须是NSNumbers。所以我可以用[NSNumber numberWithDouble:...]填充它来初始化我的数组?我不能在这里说不好!

真正的NSArray不会(不能)包含“漏洞”。但是,例如,如果第三个项目从未收到过价值,我必须这样做。我怎么能:

为我的NSNumber实现“未定义”值? 使“C”按钮删除先前输入的结果?

必须有一个解决方案。在ApplescriptObjC中我使用了一个技巧:我使用其标题在每个按钮调用的方法中进行了归因,因此:

 if sender's title as string is "C" then
 set item theRow of gResult to missing value -- the row was the selected line, gResult was a AS list.
 else
 set item theRow of gResult to sender's title as real
 end if

我该怎么办? - 选择一个特殊值(比如-1)来表示未定义的值,然后使用NSPredicate来过滤我的数组? - 我怎么能将单元格变为“无”,因为特殊值是某种东西并出现在单元格中(偶数)

我确信这个问题有一个优雅的解决方案。但是现在我只是撕掉了我留下的小头发......

感谢帮助...

3 个答案:

答案 0 :(得分:3)

您可以添加NSNull对象来表示空值。

答案 1 :(得分:2)

NSArray必须始终包含对象,nil是指示数组末尾的标志。因此,为了将nil值表示为对象,您应该使用NSNull,如下所示:

[NSNull null]

答案 2 :(得分:0)

你的NSArray中需要一个'尊贵'对象。当您看到该尊贵对象时,您的代码会执行不同的操作。这种“尊贵”的对象通常被称为“哨兵”,它可以是任何东西。例如:

static NSNumber *theSentinel;

/* initialize theSentinel somewhere with */
theSentinel = [NSNumber numberWithFloat: <anyfloat-doesnt'-matter-which>];

然后在你的代码中:

NSNumber *selection = [NSArray objectAtIndex: <user selection>];

if (selection == theSentinel) { /* something */ }
else { /* main */ }

在您的谓词中,您可以使用(在单词中,而不是代码中):

predicate = (obj NOT EQUAL theSentinel) AND (rest of your predicate based on float)