2012-03-19 4 views
2

Не могли бы вы помочь мне со следующейПередача объектов CoreData между видами без managedObjectContext

Я пишу приложение, используя CoreData и два контроллера представления.

ControllerA вид таблицы и просто перечисляет данные ControllerB представляет собой контроллер, содержащее несколько UITextFields

Для редактирования строки на ControllerA я установить свойство на ControllerB передавая мой CoreData сущности модели объекта например.

viewControllerB.item = [self.fetchedResultsController objectAtIndexPath:indexPath]; 

После этого редактируется содержимое элемента на ViewControllerB передается обратно ViewControllerA через делегата и сохранены.

Это прекрасно работает, бит, с которым я борюсь, - лучший способ добавить новый элемент в CoreData без настройки управляемого объекта ObjectContext на ViewControllerB.

Я попытался пропускание нового объекта с

ItemData *item = [NSEntityDescription insertNewObjectForEntityForName:@"ItemData" inManagedObjectContext:self.managedObjectContext]; 
viewControllerB.item = item; 

это работает, если я вхожу в форму на ViewControllerB с данными, но если я отменю вид и поп его я остаюсь с (нулем) объект в CoreData.

Я также попытался создать экземпляр объекта CoreData ItemData с помощью стандартного init, но теперь понимаю, что это не сработает, потому что CoreData не понимает контекст, а также не имеет getter/setters для свойств.

Что лучше всего подходит для этой ситуации?

1) Должен ли я просто передать managedObjectContext для просмотраControllerB? 2) Создайте класс модели, чтобы удерживать значения из формы и передавать их обратно, а затем работать с материалами CoreData?

3) или есть правильный способ делать то, что я пытаюсь сделать?

Я слабо следую за iOS Apprentice 2, чтобы иметь дело с Storiesboards и т. Д., Но в этом класс модели передается туда и обратно, который, как я знаю, отлично работает, его проблема с CoreData.

Я надеюсь, что приведенное выше ясно и что используемая терминология правильна.

Обратитесь к любой помощи.

ответ

0

Это работает, если я вхожу в форму на ViewControllerB с данными, но если я отмените просмотр и вытащу его, я останусь с (нулевым) объектом в CoreData.

Если вы закроете представление, вам необходимо удалить объект, если вы не хотите, чтобы он оставался. Так что, если кто-то ударил в «прервать» в на ваш взгляд, вы должны позвонить

[self.managedObjectContext deleteObject:theManagedObject]; 

Есть много возможных путей прохождения контекста управляемых объектов между контроллерами. Ваш AppDelegate должен иметь контекст управляемого объекта как свойство. Если контроллер a имеет указатель на контекст, вы можете просто передать это свойство (nonatomic, weak) контроллера B.

+0

Итак, в основном я должен передать элемент, который создается из следующего ItemData * item = [NSEntityDescription insertNewObjectForEntityForName: @ "ItemData" inManagedObjectContext: self.managedObjectContext]; к другому представлению, и если с ним ничего не сделано, я должен удалить его. Поэтому, если я изменю метод делегирования didCancel, чтобы вернуть управляемый объект, я могу удалить этот объект из основных данных. –

+0

Этот ответ правильный, за исключением части, касающейся необходимости передачи контекста. Если вы передаете управляемый объект, это содержит ссылку на контекст, так что вам это тоже не нужно. Удаление объекта в методе обратного вызова - путь. – jrturton

Смежные вопросы