Objective c 如何插入“;“无”;将值放入绑定到tableview的数组中?

Objective c 如何插入“;“无”;将值放入绑定到tableview的数组中?,objective-c,nsarray,Objective C,Nsarray,我想就一件事给出一些提示: 在绑定到tableview列的数组中,我有一些数字(浮点)值。使用界面按钮输入(放入数组)这些值,标记为“0”、“1”、“2”等。还有一个“C”按钮用于取消输入 稍后,我将对这个数组进行一些计算。如果未输入结果,则数组的对象不能为0。“No value”当然最好用“nil”来表示……但不允许在数组中插入nil对象(nil表示“数组结束”) NSArray包含对象。也就是说,在这里,这些对象必须是数字。所以我可以用[NSNumber numberWithDouble:…

我想就一件事给出一些提示:

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

稍后,我将对这个数组进行一些计算。如果未输入结果,则数组的对象不能为0。“No value”当然最好用“nil”来表示……但不允许在数组中插入nil对象(nil表示“数组结束”)

NSArray包含对象。也就是说,在这里,这些对象必须是数字。所以我可以用[NSNumber numberWithDouble:…]double填充数组来初始化数组什么?我不能把零放在这里

真正的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来筛选我的数组? -当特殊值是某物并出现在单元格中(偶数)时,如何将单元格变为“无”

我相信这个问题有一个优雅的解决方案。但现在我只是把我剩下的一点点头发撕下来


感谢您的帮助…

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

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

您的NSArray中需要一个“可分辨”对象。当您看到这个特殊的对象时,您的代码会做一些不同的事情。这样一个“杰出的”对象通常被称为“哨兵”,它可以是任何东西。例如:

static NSNumber *theSentinel;

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

您的NSArray中需要一个“杰出”对象。当您看到这个特殊的对象时,您的代码会做一些不同的事情。这样一个“杰出的”对象通常被称为“哨兵”,它可以是任何东西。例如:

static NSNumber *theSentinel;

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

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

[NSNull null]

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

[NSNull null]


请将代码格式化为代码以提高可读性。有关如何执行此操作,请参阅。请将代码格式化为代码以提高可读性。有关如何执行此操作的信息,请参阅。如果执行此操作,表格视图将在单元格中显示“”。不好。那么你检查空值,不显示它,就是这样。你是如何控制你的细胞的?听起来这根本不是定制的。不,它们是简单的文本单元格,绑定到arrayController。注意:这些单元格的基本行为正常:它们显示可以编辑的值,设置为空白字符串以表示“无值”。我的问题是用这些单元格计算。可能是一个“屏幕外”数组,将NSString数组转换为NSNumber数组,从空白值中过滤?我可以发誓Cocoa有一个名为NSNil的常量,但我现在似乎找不到它。它可能是NSValueTransformer(NSIsNil)…如果我这样做,表格视图会在单元格中显示“”。不好。那么你检查空值,不显示它,就是这样。你是如何控制你的细胞的?听起来这根本不是定制的。不,它们是简单的文本单元格,绑定到arrayController。注意:这些单元格的基本行为正常:它们显示可以编辑的值,设置为空白字符串以表示“无值”。我的问题是用这些单元格计算。可能是一个“屏幕外”数组,将NSString数组转换为NSNumber数组,从空白值中过滤?我可以发誓Cocoa有一个名为NSNil的常量,但我现在似乎找不到它。它可能是NSValueTransformer(NSIsNil)…如果我这样做,表格视图会在单元格中显示“”。这不是所使用的end所期望的。如果我这样做,表视图将在单元格中显示“”。这不是一个终端所期望的。我认为使用谓词是最好的解决方案。我可以用一个“屏幕外”数组来进行计算。但我还是坚持使用谓词的格式。应该类似于NSArray*myFilteredArray=[[NSArray array]FilteredArray UsingPredicate:nonNullPredicate]但如何定义格式“property xy!=''”?NSPredicate的文档应该是您的参考。(非谓词)和运算符'!='提供。如何应用将取决于您的设置细节。我认为使用谓词是最好的解决方案。我可以用一个“屏幕外”数组来进行计算。但我还是坚持使用谓词的格式。应该类似于NSArray*myFilteredArray=[[NSArray array]FilteredArray UsingPredicate:nonNullPredicate]但如何定义格式“property xy!=''”?NSPredicate的文档应该是您的参考。(非谓词)和运算符'!='提供。如何应用将取决于设置的详细信息。