NSManagedObject для временного использования, как переключаться между NSObject и NSManagedObject - PullRequest
2 голосов
/ 16 ноября 2009

Я использую модель Core Data для своего приложения для iPhone. Я искал способ создания экземпляра или использования сущности за пределами ManagedObjectContext. (Это не должно быть сделано, я знаю, я также больше ищу способ не делать этого, но в любом случае получить выгоду).

Моя задача состоит в том, чтобы у меня было представление, где пользователь может искать «Персоны», все результаты поиска анализируются и помещаются в управляемый объект Person, а затем отображаются в списке. Если пользователь щелкает Person из списка, тогда и только тогда я бы хотел, чтобы сущность Person сохранялась в хранилище, однако это требует от меня удаления всех других результатов, чтобы они не сохранялись вместе с желаемым. Кроме того, насколько мне известно, если пользователь решит полностью закрыть приложение, хранилище будет сохранено, потенциально со всеми текущими результатами поиска, смешанными с реальными данными пользователя!

Есть ли какой-нибудь способ, которым я мог бы использовать объект TempPerson NSObject, который я мог бы использовать для списка поиска? Однако без необходимости вручную извлекать 45 атрибутов из временного объекта и вручную устанавливать их для управляемого объекта!

вроде как: NSManagedObject aPersonCorrectlyReturnedFromTheStore = (NSManagedObject *) tempPersonOfJustTypeNSObject

Я видел пример кода от Apple, где они создают временное хранилище для облегчения отмены / повтора и других действий с объектом, который еще не сохранен. Я чувствую, что это было бы излишним в моей ситуации. Мне просто нужно отображать результаты поиска, пока пользователь не выберет Персона для сохранения.

Надеюсь, понятно, что я пытаюсь сделать, чувствуя, что мой словарь Core Data еще не достаточно большой:)

Спасибо за любые предложения.

Ответы [ 2 ]

4 голосов
/ 16 ноября 2009

Вы можете создать каждый объект временного лица как NSDictionary или NSMutableDictionary. Затем вы можете создать новый управляемый объект Person и использовать тот факт, что экземпляры NSManagedObject совместимы с KVC и использовать setValuesForKeysWithDictionary:.

3 голосов
/ 16 ноября 2009

Новые вставленные управляемые объекты фактически не сохраняются, пока вы не отправите контексту управляемого объекта сообщение save: .
Отслеживайте их в коллекции (наборе или массиве) - вы, вероятно, уже делаете это, поскольку вы как-то представляете результаты поиска. Затем удалите ( deleteObject: ) их все, кроме одного (-ых), выбранного пользователем.
Удаленные управляемые объекты никогда не будут сохранены.

...