Подходы, чтобы сохранить некоторые NSManagedObjects, но не другие? - PullRequest
2 голосов
/ 30 октября 2009

Я работаю над приложением Core Data для iPhone, которое извлекает удаленные ресурсы из Интернета в NSManagedObjects и сохраняет их локально.

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

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

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

И это действительно то, что я хочу - метод shouldSave в классе NSManagedObject или, по крайней мере, метод save, который я мог бы запускать для выбранных объектов. Но, насколько я могу судить, ни один из них не существует.

Итак, если у кого-то есть другие предложения, пожалуйста, дайте мне знать! Был бы очень признателен.

1 Ответ

2 голосов
/ 30 октября 2009

CoreData не для сериализации объектов, это сериализация графов объектов. Это важное различие. Если у вас есть NSManagedObject, он ассоциируется с контекстом, а CoreData обрабатывает сохранение на уровне контекста, поскольку это единственный способ гарантировать согласованность любого графа объектов. Другими словами, вы не можете сохранить отдельные объекты, потому что, если они имеют отношения с другими объектами, вам также необходимо сохранить эти объекты, и это быстро переместится на весь график.

Вы, похоже, беспокоитесь о восстановлении после сбоя. Если приложение упало и пользователь перезапустил его, ожидали ли они видеть только те элементы, которые они сохранили, или все, что было на экране до их сбоя? Если это первое, вы должны просто удалить их во время сохранения и удалить их из представления пользователей (с некоторой анимацией), если это позднее, вы должны удалить все объекты и потенциально удалить объекты, которые вам не интересны, в другое время. .

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