2012-04-26 26 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]

它比個別網點的工作肯定少了,我覺得比出口收集更簡單 - 填寫數量意味着你不必連接網點的所有文本字段。

相關問題