Где я могу разместить ансамбль uniqueIdentifier?

У меня есть приложение, которое имеет три (3) объекта в хранилище CoreData, управляемом MagicalRecord; У меня есть один (1) управляемый объект для всего приложения. На странице 28 книга гласит:

"Если вы добавили атрибут uniqueIdentifier в свои управляемые объекты"

Означает ли это, что мне нужен уникальный идентификатор для каждой из сущностей, или одна будет делать? Если мне нужен только один, в какой объект я должен его вставить, или это не имеет никакого значения. (в примере только 1 сущность, отсюда и вопрос):-}

2 ответа

Решение

Каждой сущности нужен атрибут для уникального идентификатора. Значение должно быть уникальным для каждого экземпляра этого объекта.

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

Если у вас есть три лица, Entity1, Entity2, а также Entity3 тогда вы можете иметь экземпляр Entity1 с идентификатором '42' и экземпляром Entity2 с идентификатором 42 года и другим экземпляром Entity3 с идентификатором 42 без проблем.

РЕДАКТИРОВАТЬ

Вы говорите, что каждой сущности нужен атрибут... который должен быть уникальным для каждого экземпляра этой сущности. Значение должно быть уникальным среди других экземпляров... но тогда вы дадите примеры Entity1, 2 и 3, где идентификатор одинаков для всех трех! Я в замешательстве... - SpokaneDude

Правильно. Объекты описывают атрибуты и отношения для класса управляемых объектов (именно поэтому класс, представляющий объект, называется NSEntityDescription). Сам объект не является управляемым объектом.

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

Если у вас есть 100 экземпляров Entity1 тогда каждый из этих экземпляров должен иметь другое значение для уникального идентификатора относительно всех других экземпляров Entity1,

Если у вас есть 100 экземпляров Entity2 тогда каждый из этих экземпляров должен иметь другое значение для уникального идентификатора относительно всех других экземпляров Entity2 но они не должны быть уникальными среди идентификаторов для экземпляров Entity1 потому что идентификаторы должны быть уникальными для каждой сущности.

ОК, последний вопрос (надеюсь). Приложение для книжных магазинов; есть ли у каждого уникального книжного магазина один (1) UUID, который они разделяют на iPad разных сотрудников? и если у меня есть другое приложение (скажем, для планирования парикмахерской), UUID отличается от UUID книжного магазина? И, наконец, изменяется ли значение UUID для конкретного книжного магазина? - SpokaneDude

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

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

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

Например, допустим, что ваше приложение высасывает данные JSON с сервера. В то же время ваш пользователь запускает приложение на своих iPad и iPhone. Они оба читают запись, которая описывает Bookstore с именем "Книги Боба" и адресом "42 Молл Драйв".

Каждое устройство создает экземпляр в своей локальной базе данных.

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

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

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

Уникальный идентификатор должен быть уникальным только среди экземпляров одного и того же объекта в одной и той же базе данных. Однако, когда у меня не было определенного уникального атрибута, я использовал NSUUID генерировать мои уникальные идентификаторы.

  1. Создайте свойство "guid" или что-то подобное в каждой сущности и установите для него значение UUID для каждой новой записи (и все существующие тоже).
  2. Проверьте пример ансамблей.
Другие вопросы по тегам