将 Ensembles uniqueIdentifier 放在哪里?

Where do I place the Ensembles uniqueIdentifier?

我有一个应用程序,它在 MagicalRecord 管理的 CoreData 存储中有三 (3) 个实体;我为整个应用程序设置了一 (1) 个 managedObject。在第 28 页,该书指出:

“Assuming you have added a uniqueIdentifier attribute to your managed objects,”

这是否意味着我需要为每个实体分配一个唯一标识符,或者有人会这样做吗?如果我只需要一个,我应该把它放在哪个实体中,或者它没有任何区别。 (该示例只有 1 个实体,因此是问题):-}

  1. 在每个实体上创建“guid”属性 或类似的东西,并在每个新记录(以及所有现有记录)上将其设置为 UUID。
  2. 检查集成示例。

每个实体都需要一个属性作为唯一标识符。该实体的每个实例的值都应该是唯一的。

唯一标识符的值在同一实体类型的其他实例中必须是唯一的。

如果您有三个实体,Entity1Entity2Entity3,那么您可以拥有一个 Entity1 的实例和一个标识符为“42”的实例Entity2 标识符为“42”,Entity3 的另一个实例标识符为“42”,不会造成任何问题。

编辑

You say each entity needs an attribute... which should be unique for each instance of that entity. The value must be unique among other instances... but then you give examples of Entity1, 2 and 3 where the identifier is the same for all three! I'm confused... – SpokaneDude

没错。实体描述了 class 托管对象的属性和关系(这就是代表实体的 class 被命名为 NSEntityDescription 的原因)。实体本身不是托管对象。

因此,对于模型中定义的每个实体,您都需要具有唯一的标识符属性。该唯一标识符的值在该特定类型实体的实例中必须是唯一的。

如果您有 100 个 Entity1 实例,那么相对于 Entity1.

的所有其他实例,每个实例都必须具有不同的唯一标识符值

如果您有 100 个 Entity2 实例,那么每个实例都必须具有不同的唯一标识符值,相对于 Entity2 的所有其他实例 但是 它们在 Entity1 实例的标识符中不必是唯一的,因为每个实体的标识符必须是唯一的。

OK, one last question (I hope). The app is for bookstores; does each unique bookstore have one (1) UUID that they share amoung the different employee's iPads? and if I have another app (say for barbershop scheculing), is the UUID different than the bookstore's UUID? And lastly, does the UUID value ever change for a particular bookstore? – SpokaneDude

因此,我假设您的核心数据模型有一个名为 Bookstore 的实体,该实体具有一些属性。您需要确保这些属性之一将唯一标识实体 Bookstore.

的每个托管对象实例

如果您有一个属性 name 并且您确定不会有两个同名的 Bookstore 实例,那么您可以使用 name 作为您的唯一标识符.

但是,如果可能有多个对象实例可能具有相同的属性,但仍然表示不同的对象,那么您需要一个特殊的属性,其唯一目的是保证唯一性。

例如,假设您的应用程序从服务器吸取 JSON 数据。同时,您的用户在 iPad 和 iPhone 上运行该应用程序。他们都读取了一条描述 Bookstore 的记录,名称为 "Bob's Books",地址为“42 Mall Drive”。

每个设备在其本地数据库中创建实例。

当需要同步这两个实例时,同步算法如何知道您是否有两个具有相同值的完全不同的对象,或者您是否有完全相同对象的两个副本?

这就是唯一标识符的用武之地。您告诉集成框架每个实体的哪个属性可用于判断对象是否真的相同。然后,当它看到两个不同的对象时,它可以查看唯一标识符并确定这两个对象是否真的是同一个对象,或者它们是否是两个完全独立的实例。

因此,对于每个实体,您需要确保始终可以使用其中一个属性以这种方式唯一标识对象。如果您的模型中没有这样的属性,那么您应该为实体添加一个,并确保该属性在该特定实体的实例中是唯一的。

唯一标识符仅需在同一数据库中同一实体的实例之间是唯一的。但是,当我还没有某个唯一属性时,我一直在使用NSUUID来生成我的唯一标识符。