2012-04-26 29 views
0

我建立在Xcode的应用程序,其中有在笔尖,一个81个textviews每一个顺序的名字,所以BOX1,BOX2,BOX3,box4等是否有像Excel一样的“间接”可可功能?

在做我希望能够将数据处理例如,使用每个框中的数据添加到数组中。我希望能够做的就是把这个在一个循环中,因此,例如像:

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

同样输出回textviews的时候,我希望能够从数组中循环而不是指独立于每个文本视图。所以像这样:

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

任何想法?对不起,如果这是显而易见的 - 相当新的游戏。

+1

不是一个Xcode的问题。这实际上是一个关于使用Cocoa框架开发的问题。 – Almo 2012-04-26 13:34:39

回答

1

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

+0

对不起,我没有看到相关性。用户将输入值输入到文本视图中,然后需要对其进行操作,然后重新发送到相同的文本视图。如果它只是一个文本视图,那么你只需要做这样的事情:int i = [NSNumber numberWithInt:[[box1 text] intValue]]; int j = i * 2; box1.text = [NSString stringWithFormat:@“%d”,j];但我有81个相似textviews - 我不希望有这样做操作了81次.... – user1358791 2012-04-26 15:33:35

+1

@ user1358791:相关性是,你不应该使用视图作为数据存储。控制器是应该直接拥有字符串/数字/任何内容的对象,而不必在需要它们时从特定视图集中获取它们。你有多少意见是无关紧要的,没有人建议你写82个单独的任务陈述。 – 2012-04-26 16:44:41

1

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

  1. 所有字段添加到一个数组中awakeFromNib。享受写作82 addObject:消息。
  2. 从nib中删除字段并在代码循环中创建它们,将每个字段添加到数组中。 (这是我会怎么做。)

一旦他们在一个数组,你可以参考一下他们​​的指标,因为你用字符串做相同。

但你提到你所访问的领域text财产。这只存在于Cocoa Touch中,而不是Cocoa中。如果您使用的是Cocoa Touch,那么您有第三种选择:

  • 用插座集替换您的82个插座。

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

在另一方面,我可能还在代码中创建它们,即使我比大多数可可触摸开发者更亲笔尖。部分原因是习惯(我几乎完全是一个Mac开发者),但其中的一部分是DRY原则。如果我在代码循环中创建字段,我可以只描述一次字段的所有,以及它们的不同之处。我不会改变一个字段和遗忘(甚至只是)进行更新,或将改变所有的字段(再次)的人,忘记改变一个风险。

1

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

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

它比个别网点的工作肯定少了,我觉得比出口收集更简单 - 填写数量意味着你不必连接网点的所有文本字段。

相关问题