2015-06-01 2 views
3

Я разрабатываю порт Mac OS приложения iOS и сталкиваюсь с проблемой с NSManagedObjectContexts при использовании NSArrayControllers в приложении Cocoa на основе раскадровки.CoreData ArrayControllers in Cocoa Storyboards

Это своего рода вопрос последующего до: Storyboard with TabViewController in OS X Application - Core Data Array Controllers in each scene?

У меня есть некоторые ViewControllers, представленные как в TabBarController, показывая ту же Сущность CoreData. Они загружаются через NSArrayControllers, которые подключены к InterfaceBuilder.

Из моих существующих знаний не было проблем с получением данных на экранах. Даже редактирование и сохранение в CoreData работает. Но я понял, что каждая сцена Storyboard получила собственный экземпляр NSArrayControllers и каждый свой собственный NSManagedObjectContext. При изменении и сохранении данных на одном экране он не обновляется на других экранах, которые связаны с привязками IB и работают во всех других случаях. Они просто показывают данные, они загрузились изначально и не обновляются автоматически.

Я думаю, проблема в том, что измененные данные из contextA не объединены (или синхронизированы) с другими контекстами других экранов.

Каков наилучший способ сделать это? Должен ли я использовать NSManagedObjectContextDidSaveNotification для этого?

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

Если у вас есть подсказка для меня, пожалуйста, просто прикрепите меня в правильном направлении. Спасибо за это уже.

+0

Используйте один MOC. Свяжите каждый контроллер массива с этим MOC. У вас не должно быть много, если это весь основной файл GUI. – stevesliva

+0

Спасибо за ваш комментарий. На самом деле, я думал, что сделал это, привязывая все ArrayControllers к AppDelegate.moc, но когда я отлаживаю контроллеры, я вижу, что все они имеют разные экземпляры MOC ?! – Bernd

+0

Проблема решена, я сделал ошибку большого пальца с привязками Cocoa: я просто перетащил объект в раскадровку на каждую сцену и установил это в AppDelegate. Я просто создал несколько приложений AppDelegates с этой, очень плохой идеей! Я исправил это, ссылаясь на AppDelegate через свойства на моем ViewControllers, и теперь он работает так, как должно быть. У IB просто есть свои маленькие грани, где нужно полностью осознавать, что происходит. Спасибо, хотя за ваш комментарий, это заставило меня задуматься, где моя проблема! – Bernd

ответ

0

Проблема решена, я сделал ошибку большого пальца с привязками к какао: я просто перетащил объект в раскадровку на каждую сцену и установил ее в AppDelegate. Я просто создал несколько приложений AppDelegates с этой, очень плохой идеей! Я исправил это, ссылаясь на AppDelegate через свойства на моем ViewControllers, и теперь он работает так, как должно быть. У IB просто есть свои маленькие грани, где нужно полностью осознавать, что происходит.