我有一个应用程序,在MagicalRecord管理的CoreData商店中有三(3)个实体;我有一个(1)托管对象为整个应用程序。在第28页,该书指出:
“假设您已向托管对象添加了uniqueIdentifier属性”,
这是否意味着我需要为每个实体提供uniqueIdentifier,还是会有人?如果我只需要一个,我应该把它放入哪个实体,或者它不会有任何区别。 (该示例只有1个实体,因此问题): - }
答案 0 :(得分:2)
每个实体都需要唯一标识符的属性。对于该实体的每个实例,该值应该是唯一的。
唯一标识符的值在同一实体类型的其他实例中必须是唯一的。
如果您有三个实体Entity1
,Entity2
和Entity3
,那么您可以拥有Entity1
的实例,其标识符为“42”,实例为{{ 1}}标识符为'42,另一个Entity2
实例标识符为'42',没有任何问题。
修改强>
你说每个实体都需要一个属性......它应该是唯一的 该实体的每个实例。该值必须是唯一的 实例......但是你给出了Entity1,2和3的例子 三个标识符都是一样的!我很困惑...... - SpokaneDude
这是对的。实体描述一类托管对象的属性和关系(这就是表示实体的类名为Entity3
)的原因。实体本身不是托管对象。
因此,对于模型中定义的每个实体,您需要具有唯一标识符属性。该唯一标识符的值在该特定类型的实体的实例中必须是唯一的。
如果您有100个NSEntityDescription
个实例,那么相对于Entity1
的所有其他实例,每个实例必须具有不同的唯一标识符值。
如果您有100个Entity1
个实例,则每个实例必须具有不同的唯一标识符值,相对于Entity2
但的所有其他实例在Entity2
的实例的标识符中必须是唯一的,因为标识符必须是每个实体唯一的。
好的,最后一个问题(我希望)。该应用程序适用于书店;做每个 独特的书店有一(1)个UUID,他们分享 不同员工的iPad?如果我有另一个应用程序(比如说) 理发店计划),是UUID不同于书店的 UUID?最后,UUID值是否会因特定情况而发生变化 书店? - SpokaneDude
因此,我假设您的核心数据模型有一个名为Entity1
的实体,其中包含一些属性。您需要确保其中一个属性将唯一标识实体Bookstore
的每个托管对象实例。
如果您有一个属性Bookstore
并且您确定您将永远不会有两个具有相同名称的name
个实例,那么您可以使用Bookstore
作为您的唯一标识符。< / p>
但是,如果可能存在多个可能具有相同属性但仍代表不同对象的对象实例,则需要一个特殊属性,其唯一目的是保证唯一性。
例如,假设您的应用程序从服务器中删除了JSON数据。同时,您的用户在iPad和iPhone上运行应用程序。他们都阅读了描述名为“Bob's Books”的name
的记录,并写下了“42 Mall Drive”。
每个设备都在其本地数据库中创建实例。
当需要同步这两个实例时,同步算法如何知道您是否有两个具有相同值的完全不同的对象,或者您是否拥有完全相同对象的两个副本?
这就是唯一标识符的来源。您告诉合奏框架,可以使用每个实体的哪个属性来判断对象是否真的相同。然后,当它看到两个不同的对象时,它可以查看唯一标识符并确定这两个对象是否真的是同一个对象,或者它们是两个完全独立的实例。
因此,对于每个实体,您需要确保始终可以使用其中一个属性以此方式唯一标识对象。如果模型中没有这样的属性,则应为实体添加一个属性,并确保该属性在该特定实体的实例中是唯一的。
唯一标识符在同一数据库中的同一实体的实例之间必须是唯一的。但是,当我没有某个唯一属性时,我一直使用Bookstore
来生成我的唯一标识符。
答案 1 :(得分:1)