Я новый разработчик, создающий простое приложение «словаря» для личного использования, и мой вопрос в том, как правильно реализовать дизайн Model-View-Controller в моей конкретной ситуации , Пожалуйста, несите со мной нужную предысторию:Model-View-Controller на практике на 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 - это Модель.
Тем не менее, я сохраняю все данные моей модели внутри контроллера вида, что, я уверен, ошибочно. Я думаю, что мне нужно выяснить, как создать класс для NSArray и NSDictionary для хранения данных модели. Затем я должен получить ярлыки кнопок &, чтобы отобразить желаемый текст моих данных модели через контроллер моего вида. По крайней мере, я думаю, что так работает MVC.
Мне интересно, правильно ли это понимание, и если у кого есть какие-либо указатели на то, как эффективно организовать мои данные модели, чтобы получить желаемый результат.
Большое спасибо за любую помощь! Я застрял!
Вау, спасибо, что нашли время, чтобы написать такой тщательный ответ @Ravin! Я очень ценю ваше понимание, и я собираюсь проверить серию лекций, на которые вы ссылались. –
+1 действительно. @Orpheus: не забудьте принять ответ, маловероятно, что вы получите лучший вариант :) –