основные объекты обмена данными между магазинами - PullRequest
2 голосов
/ 21 февраля 2012

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

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

Кроме того, у каждого объекта в основном списке есть дочерние управляемые объекты.Дочерние элементы могут быть изменены каждым пользователем, поэтому они должны быть уникальными для постоянного хранилища каждого пользователя.

Какие-либо предложения по передовым методам?Я довольно новичок в Core Data.

Примечание: одновременно может быть зарегистрирован только 1 пользователь.

Большое спасибо!

Ответы [ 2 ]

4 голосов
/ 21 февраля 2012

Зачем вам нужны отдельные магазины?Я думаю, вы обнаружите, что все очень быстро усложнится, если вы пойдете по этому пути, особенно если вы новичок в Coredata.

Так что, если у вас нет реальной причины пойти с отдельными магазинами, вот что яd do:

  1. Создайте свои User и Object сущности и связанные свойства
  2. Создайте отношение "многие ко многим" между User и Object сущностями (иinverse)
  3. Позволяет пользователю создать свой личный профиль (т. е. создать новый User экземпляр)
  4. Получить все доступные Object экземпляры
  5. Как только пользователь выберетте, кого они интересуют, связывают экземпляры Object с экземпляром User через отношения.В качестве альтернативы, вы можете создать новый экземпляр этого объекта, который будет уникальным для вашего User (это было бы моим предпочтением, так как вы упомянули о необходимости иметь «дочерние» объекты, настраиваемые пользователем).
  6. Когда вы закончите, сохраните контекст
  7. С этого момента вы сможете получать все объекты, которые представляют интерес для этого конкретного пользователя, путем доступа к соотношению user.objects.Вы также можете получить все User экземпляров, которые связаны с конкретным Object через обратную связь object.users.

Потому что

3 голосов
/ 21 февраля 2012

Вы можете добавить несколько хранилищ в один и тот же постоянный координатор хранилища, и все должно работать. Некоторые вещи, которые нужно знать:

  1. Если у вас есть несколько хранилищ, которые содержат одну и ту же сущность (то есть тип объекта), вам придется использовать метод -assignObject:toPersistentStore: NSManagedObjectContext, чтобы сообщить контексту, какое хранилище использовать для каждого нового объекта, который вы добавить.

  2. Любой конкретный объект может существовать только в одном постоянном хранилище. Например, если у вас есть несколько объектов Person, таких как Tom, Dick и Harriet, все три могут существовать в одном магазине или могут быть разделены между несколькими магазинами, но данный объект, такой как Tom, может существовать только в одном магазине.

  3. Базовые данные не позволяют создавать отношения между объектами в разных хранилищах. Если Том и Дик - братья, и вы хотите записать эти отношения в своей модели, они должны быть назначены в один и тот же магазин. Можно использовать извлеченное свойство вместо отношения, но это не так просто, как отношение.

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

...