Базовое внедрение объектов данных (с зависимостями) Раскадровка - PullRequest
2 голосов
/ 07 февраля 2012

Я пытаюсь использовать сегменты для передачи основных данных MOC и сущностей в другие контроллеры представления.

Итак, я использую метод prepareForSegue и делаю что-то вроде этого

SecondViewController *svc = (SecondViewController *)[segue destinationViewController];

//passing the current managed object context to the other view controller
svc.managedObjectContext = managedObjectContext

Затем я хочу передать currentEntity на тот же контроллер представления

//rootEntity is -- TheManagedObject * rootEntity in the second view controller
svc.rootEntity = currentEntity

Я не уверен, что вышеуказанный svc.rootEntity - правильный способ сделать это, но похоже, что это правильный способ, чтобы вставить currentEntity в контроллер следующего представления.

Во втором контроллере представления я хочу вставить новый объект для сущности, основанный на внедрении rootEntity выше.

Я знаю, что обычно создаю новый управляемый объект, выполняя это:

NSManagedObject *newObject = [NSEntityDescription insertNewObjectForEntityForName:@"TheNewObject" in       ManagedObjectContext:managedObjectContext //MOC injected from the First View Controller

Моя проблема в том, что я хочу сделать вышеупомянутый newObject, но я хочу, чтобы он был зависимым (отношение) к первому переданному объекту (вышеуказанному rootEntity).

Я подошел близко, но продолжаю получать неассоциированные NewObjects (должно быть один ко многим)

Следующим шагом будет повторение вышеупомянутого и вставка другого уровня в контроллер следующего представления на основе NewObject во втором контроллере представления.

Я читал книгу Зарры и несколько других, но все они используют методы init, которые, похоже, не работают с segues.

Спасибо

Ответы [ 2 ]

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

вы все делаете правильно. Как только вы окажетесь в вашем новом контроллере представления, просто продолжайте, как вы делали это при вставке новых сущностей и связей. В конце концов, вы имеете в виду тот же контекст управляемого объекта.

Так, например, если вы хотите вставить новую сущность, представляющую собой отношение, вы должны сделать что-то вроде этого:

NSManagedObject *newObject = [NSEntityDescription
   insertNewObjectForEntityForName:@"SubEntity" 
   inManagedObjectContext:managedObjectContext];
newObject.rootEntity = self.rootEntity;

Новый объект типа "SubEntity" теперь связан с rootObject.

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

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

Где код, где вы устанавливаете отношения?Вы должны быть в состоянии просто перейти на

[self.rootEntity addNewObjectsObject:newObject];

или, проще, сделать из многих концов отношений:

newObject.rootEntity = self.rootEntity;

(обратите внимание, что здесь я принял названия отношений).

В качестве бонуса вам не нужно передавать контекст управляемого объекта.Вы можете получить это из объекта rootEntity - все управляемые объекты имеют ссылку на свой контекст - rootEntity.managedObjectContext

...