我是一個新的開發人員創建一個簡單的「字典」應用程序供個人使用,我的問題是關於如何在我的特定情況下正確實現模型 - 視圖 - 控制器設計。請爲我提供必要的背景:模型 - 視圖 - 控制器在iPhone字典應用上的實踐
我希望能夠點擊按鈕並在屏幕的一側顯示一個單詞,並讓另一個標籤在另一側顯示一個關聯單詞列表側。例如:當我點擊按鈕時,我想讓主標籤顯示「貓」,併爲列表顯示「老虎」,「雪豹」,「獅子」等。輸出將是隨機的:顯示的標籤是隨機的,列表將被加密。
我已經在Xcode 4.3控制檯中通過將每個列表存儲在NSMutableArray中並使用NSDictionary來保存所有NSArrays來實現此輸出。下面是代碼:
//creates lists
NSArray *catList = [NSArray arrayWithObjects:@"Lion", @"Snow Leopard", @"Cheetah", nil];
NSArray *dogList = [NSArray arrayWithObjects:@"Dachshund", @"Pitt Bull", @"Pug", nil];
...
//creates dictionary and stores lists values with dictionary keys
NSMutableDictionary *wordDictionary = [[NSMutableDictionary alloc] init];
[wordDictionary setObject: catList forKey:@"Cats"];
[wordDictionary setObject: dogList forKey:@"Dogs"];
...
//randomizes selection of dictionary key
NSInteger keyCount = [[wordDictionary allKeys] count];
NSInteger randomKeyIndex = arc4random() % keyCount;
//displays selected key, which is the main word
NSLog(@"%@", randomKey);
//selects array list corresponding to key
NSMutableArray *randomlySelectedArray = [wordDictionary objectForKey:randomKey];
//shuffles the output of the selected word list array
for(int index = 0; index < keyCount; index++)
{
int randomIndex = arc4random() % keyCount;
[randomlySelectedArray exchangeObjectAtIndex:index withObjectAtIndex:randomIndex];
}
//prints word list and removes displayed dictionary selection
NSLog(@"%@", randomlySelectedArray);
[wordDictionary removeObjectForKey:randomKey];
(我需要添加代碼,不會顯示主字和列表一次一個,也許使用的NSTimer,但是這是我這麼遠。)
在Xcode中使用單視圖模板,我已經能夠通過將一些代碼添加到我的視圖控制器實現文件中的按鈕的IBAction方法中,讓模擬器顯示主詞和相應的列表。 (當然,我將NSLog更改爲initWithFormat。)但是,我的隨機代碼沒有任何工作。
最後,我的問題是如何區分事物,使其最符合MVC設計?我在想:我的按鈕和我的兩個標籤構成了視圖。我的視圖控制器是控制器,我的NSArrays和NSDictionary數據是模型。然而,我一直保留我所有的模型數據在視圖控制器內,我很確定是錯誤的。我想我需要弄清楚如何爲我的NSArrays和NSDictionary創建一個類來存儲我的模型數據。然後我必須設法讓我的按鈕&標籤通過我的視圖控制器顯示我的模型數據的所需文本。至少我認爲這就是MVC的工作原理。
我想知道如果這種理解是正確的,如果任何人有任何指示如何組織我的模型數據最有效地得到我想要的輸出。
非常感謝您的幫助!我卡住了!
哇,謝謝你花時間寫這樣一個徹底的答案@Ravin!我非常感謝你的洞察力,我將檢查你所引用的系列講座。 – 2012-03-01 07:12:10
確實如此。 @Orpheus:不要忘記接受答案,這不可能讓你得到更好的答案:) – 2012-03-01 14:07:33