Владение объектом модели и MVC в Cocoa / iOS / iPhone

Я пытаюсь понять, как лучше реализовать шаблон проектирования модель-представление-контроллер.

Какой объект должен «владеть» объектом модели? Должен ли один контроллер создавать экземпляр (владеть) объектом модели?

Вот пример сценария:

У меня есть UITabbarController, содержащий два UIViewController (controllerA и controllerB). Очевидно, что ни один из этих контроллеров не владеет друг другом. У меня есть объект модели, который содержит некоторые данные, а также выполняет некоторую сетевую активность. Как controllerA, так и controllerB должны иметь возможность вносить изменения в объект Model. ControllerB должен знать, когда были внесены изменения в объект Model (либо контроллером A, либо возвращенными результатами сетевой активности). Из недавнего чтения:

  • Мне нужен KVO между объектом Model и controllerB?
  • Должен ли объект Model быть синглтоном? Чтобы оба контроллера могли его изменять?
  • В более простых приложениях у меня был viewController, владеющий объектом Model. Есть ли способ для одного контроллера создать экземпляр объекта модели, но чтобы другие контроллеры имели доступ на запись к нему?
  • Я также читал об использовании делегата приложения для владения объектом модели и разрешении доступа контроллерам через приложение делегировать экземпляр общего доступа. Это кажется некрасивым - использование синглтона делегата приложения для глобального доступа к моему объекту модели. Не лучше ли сделать мой объект Model синглтоном?
  • Я видел, как кто-то на SO дал эту ссылку на iPhoneDevSDK, но причины этого метода ускользают от меня. Опять же, разве это не вовлекает делегата приложения в то, что должно быть просто синглтоном?

В основном, есть ли другой способ для двух контроллеров получить доступ (записать) к одной модели, кроме как через модель, являющуюся синглтоном ?

Кроме того, когда Контроллер владеет другим Контроллером (например, в UINavigationController, когда корневой контроллер представления создает экземпляр другого контроллера представления, чтобы складывать его поверх себя), лучшим способом для совместного использования модели будет создание экземпляра контроллера корневого представления модель и передать ее следующему контроллеру представления, прежде чем помещать ее в стек навигации)?

9
задан MattyG 8 July 2011 в 22:46
поделиться