2012-03-06 3 views
0

Я использую CoreData в своем приложении, и у меня есть набор объектов «Карточка». Игрок может иметь в своей колоде более одной карты с той же карточкой (она по-прежнему остается одной и той же картой, выведенной из базы данных, но добавляется два раза к массиву).duplicate NSManagedObject

Моя проблема возникает, когда я хочу изменить аспект одной из дубликатов карт. Все они находятся подклассами NSManagedObjects, которые имеют на них некоторые настраиваемые свойства (которые не сохраняются в базе данных). Например, когда я устанавливаю один из настраиваемых свойств на одной карте в массиве, он также изменяется на другой же карте в массиве, потому что entityForName:inManagedObjectContext: возвращает тот же объект и не загружает новый.

В принципе, мне нужно, чтобы каждый раз вызывался entityForName:inManagedObjectContext:. Я получаю новый экземпляр того же объекта, чтобы при изменении настраиваемого свойства в одном он также не был изменен в другом. Я уже пытался использовать [сущность-копия], если объект уже создан, но он не работает.

Заранее благодарю вас за помощь!

ответ

0

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

Имея это в виду, вам нужно настроить конфигурацию вашей базовой схемы данных в соответствии с вашей логической схемой. Я полагаю, что вы имели бы, скажем, CardInstance, отношения «один ко многим» с Картой и вы создадите CardInstances для того, когда вы вытащили карту из колоды, или напишите какой-нибудь код для чтения с выбранной карты в объект моментального снимка, точно так же, как если бы вы работали вручную с SQL или любым другим.