Инжектиране на основен обект на данни (със зависимост) Storyboard

Опитвам се да използвам segues за предаване на основни данни MOC и Entities към други View Controllers.

Така че използвам метода pripraveForSegue и правя нещо подобно

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 в следващия контролер за изглед.

Във Second View Controller искам да вмъкна нов обект за обекта въз основа на инжектирането на rootEntity по-горе.

Знам, че обикновено бих създал нов управляван обект, като направя това:

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

Проблемът ми е, че искам да направя горния newObject, но искам той да бъде зависим (връзка) с първия предаден обект (горния rootEntity).

Доближих се, но продължавам да получавам неасоциирани NewObjects (трябва да е един към много)

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

Прочетох книгата на Zarra и няколко други, но всички те използват init методи, които изглежда не работят с segues.

Благодаря,


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