要保存在服务器中的核心数据的唯一 ID

Posted

技术标签:

【中文标题】要保存在服务器中的核心数据的唯一 ID【英文标题】:Unique id of core data to save in server 【发布时间】:2013-05-24 10:57:17 【问题描述】:

在我的应用程序中,我必须将我的 NSManagedObject 的值发送到服务器,并且在从服务器获得成功结果后,我必须更新我的 NSManagedObject 中的一个文件。

在服务器端,id 字段是整数类型。 Core Data 中是否有任何可能的 id 可以发送到服务器并在我的 iPhone 中再次更新值?

NSManagedObjectID 适合这个吗?

【问题讨论】:

我个人为此使用 created_at 日期。 查看这篇文章:***.com/questions/12218396/… - 我会继续为您的对象创建一个新的唯一 ID 列并使用它。 【参考方案1】:

NSManagedObjectID 真的不适合这个。它不是数字,也不会转换为数字形式。如果您在服务器上进行通信——用户是否可以在多个设备上使用相同的服务器帐户?因为NSManagedObjectID 仅在创建对象的设备上有效。您不能创建托管对象并告诉它使用什么对象 ID。

如果您需要一个唯一的数字 ID,您需要自己创建一个。将数字属性添加到实体描述并将其用于您自己的 ID 值。 Core Data 不提供此功能,但您可以自己轻松完成。

【讨论】:

【参考方案2】:

NSManagedObjectID 完全在 Core Data 的控制之下。这意味着您几乎无法控制它。假设您正在使用来自服务器的数据从新创建数据库,则无法指示 Core Data 重用特定的 NSManagedObjectID(因此您必须更新服务器上的 ID)。在大多数情况下,NSManagedObjectID 应在 Core Data 中使用。

您应该使用自己的唯一 ID,这很容易使用以下代码完成:

NSString* uuid = [NSUUID new].UUIDString;
NSString* entityID = [[NSString alloc] initWithFormat: @"%@/%@", self.entity.name, uuid];

您可以直接使用 uuid,也可以使用其他 ID 方案,例如 /YourEntityName/<uuid> 或任何适合您的方式。

【讨论】:

【参考方案3】:

NSManagedObjectID 对这个目的来说足够独特,没问题。但它只改变一次它的值——至少它可能。那就是瞬态对象变得持久的时候。因此,请确保在获取 NSManagedObject 的 ID 之前保存上下文。

【讨论】:

我的服务器字段是一个整数,不幸的是我无法更改它。是否可以从 NSManagedObjectID 获取一个唯一的整数 我会说不。你不能让你的服务器提供一个唯一的ID吗?我的意思是,ID 在服务器的数据中必须是唯一的,对吧? 实际情况是我必须将对象的一些数据发送到服务器,并在得到响应时我应该在 coredata 中更新它。我的要求是唯一标识提交的文件并更新我的本地

以上是关于要保存在服务器中的核心数据的唯一 ID的主要内容,如果未能解决你的问题,请参考以下文章

iOS核心数据损坏?

游戏服务器生成全局唯一ID的几种方法

游戏服务器生成全局唯一ID的几种方法

游戏服务器生成全局唯一ID的几种方法

如果在服务器端生成唯一 ID,应用程序如何防止数据库中的重复条目

雪花算法中机器id保证全局唯一