Рецепты для передачи NSManagedObjects среди UIViewControllers - PullRequest
3 голосов
/ 23 февраля 2012

В приложении могут быть разные UIViewController с одинаковыми NSManagedObject.Обычно я делаю следующее:

@interface CustomController : UIViewController

@property (nonatomic, retain) ProductNSManagedObject* productManaged;

@end

Затем, когда я istantiate CustomController, я делаю инъекцию следующим образом:

customController.productManaged = ....

как только сделано, CustomController отвечает за выпускэто.

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

MainController -> ChildController -> SubChildController -> ....

, где MainController имеет управляемый объект.

Нужно ли создавать много промежуточных свойств или мне нужно выполнить новый NSFetchRequest или что-то еще?

Тот же аспект может быть применен к NSManagedObjectContext.Обыскивая, я обнаружил, что контекст может быть получен из делегата приложения, которым он принадлежит (если есть).Но этому подходу не хватает гибкости, как писал Маркус Зарра в передача информации об объекте-контенте на iphone .

Есть предложения?Заранее спасибо.

Ответы [ 2 ]

2 голосов
/ 23 февраля 2012

Я создаю одноэлементный объект, который содержит контекст управляемого объекта, который будет использоваться во всем приложении.Я помещаю любой поддерживающий код, связанный с данными (например, координатор постоянного хранилища) в этот синглтон, и держу всю информацию представления и контроллера отдельно от нее.

В одном случае мне нужен контекст управляемого объекта для другого потока.Стало очевидным, что было бы полезно провести рефакторинг и поместить этот контекст в один и тот же синглтон.Тогда слияние между двумя контекстами может быть сделано внутри синглтона.

Это помогло мне управлять своим кодом.Вы могли бы рассмотреть это.

1 голос
/ 24 февраля 2012

Это очень распространенный вопрос (см. здесь и здесь для связанных вопросов). Как я писал в ответах на связанные вопросы, вы должны держаться подальше от одиночных игр и создать отдельный объект, который позаботится об экземпляре объекта, о создании графа объектов для вашего приложения. Этот отдельный объект может содержать ссылки на все общие объекты и предоставлять их строящимся объектам, так что ни один из ваших обычных объектов не должен сохранять ссылку на что-либо, просто чтобы передать его как зависимость от других объектов. См. Это сообщение в блоге для более обоснованного противодействия неправильному использованию синглтонов и дальнейших указателей, особенно статей Мишко Хевери.

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

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