Как лучше всего хранить объект в свойстве отношения CoreData, которое может быть разных типов? - PullRequest
0 голосов
/ 14 марта 2012

Мне нужно сохранить ленту активности в приложении для iOS. У элементов ленты активности будет поле payload, которое может быть одним из многих (и я действительно имею в виду много) типов объектов в системе.

Какой хороший способ реализовать это поле payload для сущности Activity в моей модели CoreData?

Можно ли использовать тип данных id или, возможно, использовать тип NSManagedObject?

Один из способов обойти это, возможно, просто сохранить entityId CoreData в виде строки в специальном поле, но я бы предпочел этого избежать, если есть лучший способ.


Пример:

Для простоты, скажем, у нас нестандартная модель блогов: User, Blog, BlogPost, Comment и могут произойти следующие действия:

  • Пользователь может создать новый блог.
  • Пользователь может опубликовать новое сообщение в блоге.
  • Блог можно комментировать.
  • Комментарий, возможно, понравился.
  • и т.д.

Каждый из них генерирует новый элемент Activity на веб-сайте, который, в свою очередь, имеет отношение payload к элементу, который был изменен или воздействовал на него.

Теперь мне нужно загрузить, перевести и сохранить эти элементы фида активности с веб-сайта в моем приложении для iPhone ... так как мне имитировать это поле payload, поскольку оно может указывать на любую возможную сущность?

Однако в моем реальном коде есть более 10 типов объектов, которые можно поместить в это поле payload, поэтому я ищу здесь хороший подход.

Ответы [ 2 ]

1 голос
/ 14 марта 2012

Если вам не нужно искать / запрашивать поля ваших объектов переменного типа, то я предлагаю использовать NSCoder, чтобы преобразовать их в двоичное представление и сохранить их в поле BLOB вашего управляемого объекта.Возможно, вы захотите сохранить некоторую информацию о типе в другом поле того же управляемого объекта.С другой стороны, если вам нужно искать между этими переменными объектами, то вы должны создать новый тип управляемого объекта (сущность) для каждого объекта.Смотрите мой ответ также здесь: NSCoding VS Основные данные

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

Единственное, что вы можете использовать, это NSManagedObject. Таким образом, вы должны создать свою модель и свое отношение и создать новый файл для Activity и полезной нагрузки, который будет подклассом NSManagedObject.

Взгляните на Руководство по программированию основных данных . Там вы найдете ответы на свои вопросы.

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