дубликат NSManagedObject - PullRequest
       6

дубликат NSManagedObject

0 голосов
/ 06 марта 2012

Я использую CoreData в своем приложении, и у меня есть набор сущностей "Карта". У игрока может быть более одной карты в его колоде (это все та же карта, извлеченная из базы данных, но добавленная в массив два раза).

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

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

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

1 Ответ

0 голосов
/ 06 марта 2012

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

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

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