我正在使用Core Data在Swift中构建一个简单的应用程序,并尝试决定是否应该在我的实体中存储唯一的ID。在我的研究中,我已经找到了这样做的例子和不做的例子,但我还没有找到任何明确的理由支持这种决定。
请注意:
- 我来自RDBMS背景,我知道Core Data是一个对象图,而不是关系数据库
- 我知道Core Data会创建一个NSManagedObjectID
,但我如何确定这是否足够
我看到像this这样的线程(从7年前开始,顺便提一下),它们列出了这些选项:
但我还没有找到关于哪些选项适合哪些情况的大量信息。
我应该问自己什么问题,以确定Core Data的唯一标识符(NSManagedObjectID)是否是我需要的,或者我是否应该超越它并选择将我自己的一个包含在混合中。
答案 0 :(得分:0)
如果核心数据的唯一标识符(NSManagedObjectID)是我需要的全部
究竟需要什么目的?
Core Data在内部维护其对象的主键,因此您基本上不需要自己实现它们。在CD中,您与已经具有建立关系机制的对象进行交互。您只需将一个NSManagedObject
分配给另一个NSManagedObject
的属性,这将代表O2O或O2M关系,如下所示:
anotherObject.parent = oneObject;
对于许多方面来说,会有一套。看看documentation。
当您需要某种外键时,唯一的情况是将数据与某些Web服务同步。
如果您需要在用户默认值中存储某些特定NSManagedObject
的引用,则可能会对此post感兴趣。
顺便说一下,有[[NSUUID UUID] UUIDString]
。
答案 1 :(得分:0)
将自己的唯一ID与Core Data一起使用的唯一原因是您将数据同步到其他设备或Web服务。 MX-C30NT-B
MX-C30NT-C
MX-C30NT-M
MX-C30NT-Y
MX-C30DR
MX-C30HB
MX-C30NV-B
MX-C30NV-C
MX-C30NV-M
MX-C30NV-Y
...
足以供本地使用,但它们不能很好地进行同步。例如,如果从后端服务器获取数据,它可能具有唯一ID,但您无法强制Core Data使用它们。同样,即使您同步到其他iOS设备,也无法强制第二台设备上的核心数据使用与第一台设备相同的NSManagedObjectID
。
对于本地使用,您只需要NSManagedObjectID
。如果需要在用户默认值中保存对托管对象的引用,则可以存储该引用。稍后,您可以使用NSManagedObjectID
或object(with:)
快速检索托管对象。