Шаблон проектирования для совместного использования сетевой модели данных между ViewControllers - PullRequest
1 голос
/ 15 декабря 2011

Я сейчас занимаюсь разработкой приложения для iPad. По деловым причинам не будет никакого сохранения данных на устройстве. Данные будут доступны с внутреннего сервера по мере необходимости, используя NSURLConnection. Я разработал «модельный» объект, который осуществляет сетевой доступ. Пользовательский интерфейс имеет контроллер разделения представления с контроллером представления таблицы внутри UINavigationControlller в качестве корневого контроллера. Пользователь будет детализировать контроллер табличного представления, чтобы в конечном итоге загрузить контроллер подробного представления. Табличные контроллеры передают ссылку на объект модели, когда они загружаются в UINavigationController, чтобы они могли динамически генерировать части ячейки табличного представления из модели. Чтобы быть отзывчивым, каждый контроллер табличного представления устанавливает себя в качестве делегата объекта Model в представлении, и при выборе ячейки запрашивает объект модели, который, в свою очередь, обновляет пользовательский интерфейс через метод делегата.

Мой вопрос: где лучшее место для установки и отмены делегата модели данных? В настоящее время я устанавливаю делегата в ViewWillAppear и устанавливаю его равным нулю сразу после навигации. Контроллер: pushViewController: Animated.

// Setting the delegate
- (void)viewWillAppear:(BOOL)animated {
// set ourself as the delegate
[[self dataModel] setDelegate:self];

// Get the count of studies
[[self dataModel]GetListOfDiagnosticStudyResultsForID:[[self currentPatient]patientID]];

}

// setting delegate to nil
DiagnosticStudiesViewController *selectedVC = [[DiagnosticStudiesViewController alloc] init];
selectedVC.dataModel = self.dataModel;
[[self dataModel]setDelegate:nil];
[[self navigationController]pushViewController:selectedVC animated:YES];

Это уместно? Не могли бы вы подумать о любых проблемах с этим шаблоном. Программа очень отзывчива, и я не вижу никаких проблем в инструментах. Есть ли лучший способ сделать это?

Извините, что этот вопрос долго задавался.

1 Ответ

1 голос
/ 15 декабря 2011

Я думаю, что это нормальный подход, но необходимо сделать несколько замечаний:

  • Вы делите модель данных с двумя представлениями, поэтому вам может потребоваться обновить представление при возврате.к родительскому элементу DiagnosticsStudiesViewController (self в вашем коде) в зависимости от того, как отображаются данные dataModel.
  • Это может стать проблематичным в будущем, если вам понадобится создать поток кода.В этом случае вам может потребоваться сделать копию dataModel для передачи в DiagnosticsStudiesViewController или обработать изменения в dataModel потокобезопасным способом.
  • Очевидно, что для работы обоих контроллеров представления вам потребуется сетевое соединение,Вы приняли решение о рабочем процессе с двумя вашими контроллерами представления, потянув dataModel с сервера.В будущем может быть трудно отсоединить эти контроллеры представления.

Если это работает для вашего дела, и было принято решение не настаивать, я думаю, вы будете в порядке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...