2010-06-27 2 views
2

Я использую tableview с данными из coredata, используя nsfetchedresultscontroller. Когда вид загружается, я создаю новый объект, используяtableview coredata временный объект

Таким образом, новый объект появляется в моем представлении таблицы. Теперь я хочу, чтобы этот объект был только временным, но когда я редактирую какой-либо объект внутри tableview и сохраняю managedObjectContext, временная сущность также будет сохранена, и я не хочу этого.

Это их способ сохранить только один объект, а не все внутри управляемого объектаОбъект?

Это их другой способ сделать временный объект для моего стола.

Любая помощь будет очень желанной. Thanks Ton

+0

Вы можете передать контекст nil initWithEntity: insertIntoManagedObjectContext. См. Этот вопрос: http://stackoverflow.com/questions/3256195/how-to-deal-with-temporary-nsmanagedobject-instances – Symmetric

ответ

0

Нет, в управляемомОбъекте Сохранение контента - это все или ничего. То, что я не знаю, что произойдет, если вы установите постоянное хранилище управляемого объекта к нолю

- (void)assignObject:(id)object toPersistentStore:(NSPersistentStore *)store 

Если вы сохраните managedObjectContext этот объект не должен быть сохранен. Это всего лишь предположение, но скажите мне, если это работает ;-)

+0

Нет. это не работает. Я думаю, он будет назначать объект в хранилище по умолчанию при использовании nil. – Ton

0

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

Посмотрите на добавление кода книги в CoreDataBooks, который использует тот же подход, чтобы выбросить вновь добавленный объект, когда пользователь отменяет.

+0

Не создавайте отдельный контекст. Это очень расточительно и дорого. Если объект должен быть временным, создайте его с -init и вообще не переходите в контекст. –

+0

Согласитесь с Маркусом, вот как я это делаю, и я использую базовый класс для обработки рекурсивной вставки в допустимый контекст ... http://www.locassa.com/index.php/2011/05/temporary- storage-in-apples-coredata/ –

+0

@ MarcusS.Zarra, вы по-прежнему не рекомендуете создавать отдельный контекст для временных (потенциально отброшенных) объектов? Это все еще действует в 2014 году? Заранее спасибо. –

2

Создайте новый объект NSManagedObject с его инициализацией alloc и передайте nil вместо NSManagedObjectContext. Затем, если позже вы решите, что хотите, чтобы этот объект был постоянным, установите его контекст. Однако это не позволит вам увидеть его в NSFetchedResultsController, потому что он не будет связан с контекстом.

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

+0

Это не удастся при @ динамических свойствах. Документ для initWithEntity: insertIntoManagedObjectContext говорит: «Важно Этот метод является назначенным инициализатором для NSManagedObject. Вы не должны инициализировать управляемый объект, просто отправив его init». – Symmetric

+0

Ваш комментарий не имеет смысла. Мои ответы на конкретные состояния передаются в nil для NSManagedObjectContext. Не было никаких сомнений в том, что голый '-init' должен быть вызван. –

+0

Хорошо, извините. Я прочитал «alloc init» выше как голый init, а не initWithEntity.В любом случае ваш ответ на этот другой вопрос делает его более понятным, спасибо: http://stackoverflow.com/questions/3256195/how-to-deal-with-temporary-nsmanagedobject-instances – Symmetric

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