是否存在像Excel中那样的“间接”Cocoa函数?

时间:2012-04-26 13:31:10

标签: cocoa excel-indirect

我在Xcode中构建一个应用程序,其中NIB中有81个文本视图,每个视图都有一个顺序名称,所以box1,box2,box3,box4等。

在进行数据操作时,我希望能够使用每个框中的数据添加到数组中。我想要做的就是把它放在循环中,例如:

NSMutableArray *array = [[NSMutableArray alloc] init];
for (int i=1; i<82; i++) {
    [array addObject: [Indirect("box" & i).text];
}

类似地,当输出回textviews时,我希望能够从数组循环而不是独立地引用每个textview。所以像:

for (int i=1; i<82; i++) {
    indirect("box" & i).text = [array objectAtIndex:i];
}

有什么想法吗?对不起,如果这很明显 - 对游戏来说还是新手。

3 个答案:

答案 0 :(得分:1)

考虑MVC设计模式。您的计算不应直接基于视图(UI),而应基于控制器中的某些状态,即视图的 set 。每次编辑字段时,它都会通过目标/操作或通过Cocoa绑定通知您的控制器。当发生这种情况时,控制器会更新您的数据模型(在您的情况下,这意味着它会更新计算并可能将结果反映在UI的另一部分 - “总计”字段中)。

答案 1 :(得分:1)

在Cocoa中,有两种方法可以做到:

  1. 将所有字段添加到awakeFromNib中的数组中。喜欢写82条addObject:条消息。
  2. 从笔尖中删除字段并在代码循环中创建它们,将每个字段添加到数组中。 (这就是我要做的。)
  3. 一旦他们在一个数组中,你可以通过索引引用它们,就像你对字符串一样。

    但是你提到你正在访问字段'text属性。这只存在于Cocoa Touch中,而不是Cocoa中。如果你正在使用Cocoa Touch,那么你有第三个选择:

    • 用插座系列更换82个插座。

    outlet集合属性的值是一个数组,所以你可以在nib中创建字段,但仍然可以通过索引将它们引用到代码中的数组中。

    另一方面,我可能仍然会在代码中创建它们,即使我比大多数Cocoa Touch开发人员都更加专业。部分原因是习惯(我几乎完全是Mac开发人员),但其中一部分是DRY原则。如果我在代码循环中创建字段,我可以完全描述所有字段,以及它们的不同方式。我不会有改变一个字段而忘记(甚至只是拥有)来更新其他字段或者要更改所有字段(再次)和忘了改变一个。

答案 2 :(得分:1)

我会使用标签来处理:你可以在笔尖中将它们设置为1到81(查找控制下的字段)。

然后在-awakeFromNib中,您可以在[self viewWithTag:i]循环内拨打for

它的工作肯定少于个别网点,我认为甚至比插座收藏更简单 - 填写数字意味着你不必为所有文本字段连接插座。