Сохранить, но не сохранять NSManagedObject в CoreData?

У меня есть короткий процесс настройки в моем приложении, и я создаю NSManagedObject для хранения имени и других сведений о человеке, однако во время этой настройки я не хочу сохранять объект, пока пользователь не нажмет «Готово» прямо в конце setup (на всякий случай, если они отменят установку по какой-либо причине).

Итак, возможно ли удерживать объект, содержащий мою информацию, в течение короткого времени до конца процесса установки, фактически не сохраняя его в CoreData?


person Josh Kahane    schedule 15.04.2012    source источник


Ответы (2)


Когда вы имеете дело с CoreData, все действия по добавлению/изменению/удалению происходят в NSManagedObjectContext, но изменения не сохраняются на диск до тех пор, пока вы не вызовете «сохранить» в этом контексте.

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

person isaac    schedule 15.04.2012
comment
Ну вот и у меня проблемы. Я никогда не вызываю сохранение в контексте, я мог бы даже не вводить никаких подробностей, оставить все поля пустыми в подробном представлении и вернуться к моему списку объектов и увидеть, что объект был добавлен, несмотря на это (с нулевыми значениями). - person Josh Kahane; 15.04.2012
comment
Тем не менее, я думаю, что только что нашел, что я делал неправильно. Кроме того, мне нужно передать свой объект примерно на 5 просмотров (что не самый лучший вариант), как я могу легко это сделать? - person Josh Kahane; 15.04.2012
comment
Если каждый из промежуточных контроллеров представления будет взаимодействовать с объектом, имеет смысл просто передать объект каждому последовательному контроллеру представления (я предполагаю, что вы используете стек навигационного контроллера) посредством свойства. Если представления 2-4 не имеют ничего общего с объектом, вы можете подумать о том, чтобы сделать ваш 5-й контроллер представления делегатом вашего первого (где вы получаете исходную ссылку на управляемый объект). - person isaac; 15.04.2012
comment
Хорошо, круто, похоже, я настрою делегата. Надеялся, что будет супер-пупер простой способ, например, просто подержать его в NSUserDefaults в течение короткого времени, но я ожидаю, что это будет слишком вялым? В любом случае, спасибо. - person Josh Kahane; 15.04.2012

Вы также можете использовать

NSEntityDescription *ed = [NSEntityDescription entityForName:@"YourManagedObject" inManagedObjectContext:managedObjectContext];
YourManagedObject *obj = [[[YourManagedObject alloc] initWithEntity:ed insertIntoManagedObjectContext:nil] autorelease];

чтобы создать управляемый объект, не вставляя его в ваш контекст. Вы можете сделать это позже, позвонив по номеру [managedObjectContext insertObject:obj];.

person Christian Schnorr    schedule 15.04.2012