核心数据objectId不断变化

时间:2010-05-12 13:34:55

标签: iphone core-data

我有一些数据导出到XML文件并放入远程FTP服务器。

我必须用唯一属性识别每个对象,这并不重要,但必须是持久的总是=>它永远不会改变。

我不想创建唯一的属性,序列,序列等。

我正在使用objectID,但每次使用它都会得到一个新的引用。

我知道在保存对象之前,它有一个'temporal id',但是一旦保存它就会得到明确的。

我没有看到这一点,从来没有。

当我导出时,只需获取所有数据并循环,并始终获得新的引用:

NSURL *objectID = [[personalDataObject objectID] URIRepresentation];

// some of id received for the SAME OBJECT (no changes made, saved, ...)
// 61993296
// 62194624

感谢,

修改

我使用%d而不是%@,现在返回的数据是:

x-coredata://F46F3300-8FED-4876-B0BF-E4D2A9D80913/DataEntered/p1
x-coredata://F46F3300-8FED-4876-B0BF-E4D2A9D80913/DataEntered/p2

2 个答案:

答案 0 :(得分:17)

NSManagedObjectID不保证一致。它可以根据许多因素进行更改,包括数据迁移和其他因素。如果您将其用作对象的唯一标识符,请停止。

您需要在线程之间传递引用时,唯一需要使用NSManagedObjectID的时间。除了这种情况,你不应该依赖它。

如果您需要唯一ID,请创建一个并将其存储在您的实体中。

答案 1 :(得分:3)

我认为这可能是一个报道问题。您显示的应该是URI / UUID的数字是方式,简短的方式。

They should look like

  

UUID(普遍独特   标识符),也称为GUID   (全球唯一标识符)或IID   (接口标识符),是128位   值保证是唯一的。一个UUID   在空间和空间上都是独一无二的   时间通过组合一个独特的值   它所在的计算机   生成 - 通常是以太网   硬件地址和值   代表的数量   自10月以来每隔100纳秒   15,1582年00:00:00。

     

UUID的标准格式   以ASCII表示的是一个字符串   例如,用连字符打断   68753A44-4D6F-1226-9C60-0050E4C00067。   十六进制表示看起来像你一样   可能期望,就像一个数字列表   值前面带有0x。例如,   0xD7,0x36,0x95,0x0A,0x4D,0x6E,   0x12,0x26,0x80,0x3A,0x00,0x50,   0xE4,0xC0,0x00,0x67。用一个   UUID,你只需创建它然后   将结果字符串复制到您的   标头和C语言源文件。   因为UUID简单地表示为   一个字节数组,没有   字节序的考虑因素   不同的平台。

我认为你会看到不同的价值观,因为每次检查UUID时,你只会得到一块,而另外一块。表示为URI,它们看起来应该更像URL。它们肯定不会像整数。

相关问题