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

时间:2013-05-24 10:57:17

标签: iphone objective-c core-data

在我的应用程序中,我必须将NSManagedObject的值发送到服务器&从服务器获得成功结果后,我必须更新NSManagedObject中的字段。

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

NSManagedObjectID适合这个吗?

3 个答案:

答案 0 :(得分:5)

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

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

答案 1 :(得分:1)

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>或任何适合您的ID方案。

答案 2 :(得分:0)

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