В моем приложении у меня есть UITableViewController
, который показывает список событий. Этот контроллер использует ManagedObjectContext Say ParentContext
. Теперь, если выбрано какое-либо событие, отображается подробный контроллер просмотра, где пользователи могут редактировать детали события. Таким образом, я создал контекст ребенка сказать,Основные данные Многоуровневый родительский - Детский контекст
ChildContext with type "NSPrivateQueueConcurrencyType"
ChildContext whose parent Context is "ParentContext".
Мой код:
NSManagedObjectContext *childContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType];
childContext.parentContext = self.context ;
Теперь снова есть некоторые поля и отношения, которые необходим другой бур вниз. Таким образом, я создал еще один ChildContext для нового контроллера представления говорят,
GrandChildContext with type "NSPrivateQueueConcurrencyType"
GrandChildContext whose parent context is "ChildContext"
этот процесс идет на другом уровне (всего 4 уровня от родительского (Tableview) к ребенку)
self.context - Parent Context
|
|
ChildContext
|
|
GrandChildContext
|
|
GrandGrandChildContext
Моя сущность выглядит следующим образом
EntityA -- (Edit View Controller - uses ChildContext)
|
|- Field1
|
|- Field2
|
|- RelationShip (1 to Many) - (Relationship Add/Edit View Controller - uses GrandChildContext)
|
|- Field1
| .
| .
|- Field3
|
|- Relationship (1 to Many) - (Relationship Add/Edit View Controller - uses GrandGrandChildContext)
|
|- Field1
|
|- Field2
Это правильный способ использования родительского - детского контекста? Потому что в один момент времени у меня будет 1 NSMainQueueConcurrencyType MOC and 3 NSPrivateQueueConcurrencyType MOC
.
Если это не так? Есть ли другой путь?
Слишком много детского контекста влияет на производительность приложений?
Первоначально я использовал свойства и NSArrays для управления введенными пользователем данными, и когда пользователь нажимает кнопку «Сделано», я буду обновлять/создавать управляемые объекты. Но это утомительная работа, из-за которой мой диспетчер просмотра грязный. Поэтому я переключился на контекст родителя-ребенка, который очень легко сохранить или выбросить обновления.
Благодаря
Во всех сверлениях у меня есть задача редактирования. Мне удалось немного сократить операцию сохранения/отмены в некоторых деталях. После работы с этой моделью в течение некоторого времени единственная проблема, которую я обнаружил, заключается в том, что созданные отношения не видны в родительском ребенке. Это происходит только в ios 5, это известная ошибка, и я исправил ее, вызвав getPermanentID непосредственно перед тем, как сохранить дочерние контексты. – krishnan
О, мой бог, + кришнан, я порвал свои волосы наполовину, прежде чем нашел этот комментарий, и попытался добавить вызов getPermanentIDs. –