Внедрение основного объекта данных (с зависимостью) Раскадровка

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

Итак, я использую метод 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

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

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

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

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

Спасибо,


person jamesC    schedule 07.02.2012    source источник


Ответы (2)


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

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

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

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

person Mundi    schedule 07.02.2012
comment
Отлично, спасибо, теперь я чувствую, что наконец-то разобрался с основными данными. - person jamesC; 08.02.2012

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

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

[self.rootEntity addNewObjectsObject:newObject];

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

newObject.rootEntity = self.rootEntity;

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

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

person jrturton    schedule 07.02.2012
comment
о, я думал, что мне тоже нужно передать контекст. Меньше кода = лучше код. Спасибо, что нашли время. - person jamesC; 08.02.2012