«Об обновлении дубликата ключа» для основных данных - PullRequest
0 голосов
/ 03 июля 2010

Я хотел бы знать, существует ли какая-либо аналогичная функциональность или способ предварительно выполнить функцию «при обновлении дублированного ключа» с данными ядра, как в MySQL.

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

Единственный способ, которым я в настоящее время знаю, как это сделать - это прочитать строки из БД, посмотреть, существует ли строка, а затем обновить ее. В противном случае добавить новую строку. Кажется, это плохо для меня, я не прав?

Ответы [ 2 ]

2 голосов
/ 03 июля 2010

Самый простой ответ на это - выполнить запрос к контексту Core Data и вернуть объект, если он существует.Это наиболее эффективное и наименее подверженное ошибкам решение проблемы.

Вам не нужно создавать отдельный NSManagedObjectContext и пытаться работать с политиками слияния, это очень неэффективный и опасный способ попробовать ирешить такую ​​простую проблему.

Core Data обрабатывает много кэширования для вас в фоновом режиме.Если вы пытаетесь получить только что созданный объект, существует очень высокая вероятность того, что он все еще находится в кэше, поэтому ответ на ваш запрос будет почти мгновенным.

Примечание

Я просто вернулся к обоим этим примерным проектам еще раз, чтобы сообщить им об ошибке, и заметил, что они были обновлены, и наконец удалил предложение о создании нового контекста.Теперь они используют NSUndoManager, где это уместно, и один контекст.

0 голосов
/ 03 июля 2010

EDIT

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

Беспокойся о жизненном цикле твоего объекта. Когда создаются экземпляры? Когда они уничтожены? Что делает ваши экземпляры уникальными? Используя Книги в качестве примера сущности, книга имеет ISBN, который является уникальным способом идентификации заголовка, однако существует множество копий каждого заголовка. У вас есть два варианта в вашей модели Entity, вы можете создавать отдельные экземпляры для каждой копии заголовка или иметь один экземпляр с атрибутом count.

Примеры проектов CoreDataBooks и iPhoneCoreDataRecipes используют NSUndoManager для отслеживания изменений состояния между представлениями.

...