Передача объектов CoreData между представлениями без управляемогоObjectContext - PullRequest
2 голосов
/ 19 марта 2012

Не могли бы вы помочь мне со следующим

Я пишу приложение с использованием 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 не понимает контекст и также не имеет методов получения / установки для свойств.

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

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

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

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

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

С нетерпением ждем любой помощи.

1 Ответ

0 голосов
/ 19 марта 2012

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

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

[self.managedObjectContext deleteObject:theManagedObject];

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...