Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/113.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 我应该问自己什么问题来确定我是否需要一个';主键';我的核心数据应用程序?_Ios_Core Data_Primary Key_Uniqueidentifier - Fatal编程技术网

Ios 我应该问自己什么问题来确定我是否需要一个';主键';我的核心数据应用程序?

Ios 我应该问自己什么问题来确定我是否需要一个';主键';我的核心数据应用程序?,ios,core-data,primary-key,uniqueidentifier,Ios,Core Data,Primary Key,Uniqueidentifier,我正在使用核心数据在Swift中构建一个简单的应用程序,并试图决定是否应该在我的实体中存储一个唯一的id。在我的研究中,我发现了这样做的例子和不这样做的例子,但我还没有发现这种决定背后有任何明确的理由 请注意: -我来自RDBMS背景,我知道核心数据是对象图,而不是关系数据库 -我知道核心数据会创建一个NSManagedObjectID,但我如何确定这是否足够 我看到的线程(顺便提一下,是7年前的)列出了这些选项: 使用-[NSManagedObject objectID]。请注意,此ID是临

我正在使用核心数据在Swift中构建一个简单的应用程序,并试图决定是否应该在我的实体中存储一个唯一的id。在我的研究中,我发现了这样做的例子和不这样做的例子,但我还没有发现这种决定背后有任何明确的理由

请注意: -我来自RDBMS背景,我知道核心数据是对象图,而不是关系数据库
-我知道核心数据会创建一个
NSManagedObjectID
,但我如何确定这是否足够

我看到的线程(顺便提一下,是7年前的)列出了这些选项:

  • 使用-[NSManagedObject objectID]。请注意,此ID是临时的,直到 要么第一次保存对象,要么调用
  • [NSManagedObjectContext获取对象的永久性:错误:]使用CFUUID函数族为对象中的每个对象生成UUID -awakeFromInsert方法
  • 创建自己的主键式系统,该系统在模型中存储一个整数,并随着每个对象的创建而递增
但我还没有找到多少关于哪些选择适合哪些情况的信息

我应该问自己什么问题,以确定核心数据的唯一标识符(NSManagedObjectID)是否就是我所需要的全部,或者我是否应该超越这一点,选择将我自己的一个包含在混合中

如果我只需要核心数据的唯一标识符(NSManagedObjectID)

究竟需要什么目的

核心数据在内部维护其对象的主键,因此基本上不需要自己实现它们。在CD中,您可以与已经具有建立关系机制的对象进行交互。您只需将一个
NSManagedObject
分配给另一个
NSManagedObject
的属性,这将表示O2O或O2M关系,如下所示:

anotherObject.parent = oneObject;
对于许多人来说,这将是一个设定。看一看这张照片

需要某种外键的唯一情况是将数据与某个web服务同步

如果需要在用户默认设置中存储对某个特定
NSManagedObject
的引用,您可能会对此感兴趣


顺便说一句,有
[[nsuid UUID]UUIDString]

将您自己的唯一ID与核心数据一起使用的唯一原因是您是否将数据同步到其他设备或web服务
NSManagedObjectID
对于本地使用已经足够了,但是对于同步来说,它们不能很好地工作。例如,如果您从后端服务器获取数据,它可能具有唯一的ID,但您不能强制核心数据使用它们。同样,即使同步到另一台iOS设备,也不能强制第二台设备上的核心数据使用与第一台设备相同的
NSManagedObjectID


对于本地使用,
NSManagedObjectID
是您所需要的全部。如果需要在用户默认设置中保存对托管对象的引用,可以存储该引用。稍后,您可以使用
object(with:)
existingObject(with:)
快速检索托管对象。

我不是核心数据编码员(只是涉猎过它),但我一直认为模型有两个可能的“源”——mySQL或XML文件。作为一个MSSQL的人,在过去的一生中,我认为你喜欢的任何DB设计都足以作为一个答案。事实上,我读到的一些观点认为,CD有时是一个不必要的层,使用直接的mySQL设计可以简化工作。(这些论点有时声称CD最大的优势在于持久性。)我考虑了一些用途,比如1)我有一个
UISegmentedControl
,它控制一些用户默认的选择,并且使那些0和1的唯一ID非常容易设置/更改该控件的选定值,并将索引值存储在
NSUserDefaults
2)避免在中使用
字符串进行匹配很多情况下(虽然不是为了确定关系)和3)在我的应用程序发布后,似乎更容易更改特定唯一记录的“描述”属性,例如,该记录可能是“一多”中的“一”。然后我还看到了非常聪明的苹果人()他们使用了类似
newTask.setValue(nsuid()的东西.UUIDString,forKey:“id”)
在他们的示例中,这让我觉得一定有很好的理由。
NSManagedObjectID
指的是特定存储中的特定对象。因此,如果不需要与外部应用程序交换数据,您可以安全地使用它。请参阅文档部分。Tom,你的意思是,如果我以后要添加使用iCloud跨iOS设备同步的功能,我需要管理自己的唯一ID,这一点很明显。正确吗?是的,因为您不能在服务器端使用
NSManagedObjectID
。您需要一些其他ID来告诉服务器您正在更新什么,或者理解来自服务器的传入数据。