【问题标题】:CORE DATA objectId changes constantlyCORE DATA objectId 不断变化
【发布时间】:2011-02-18 15:22:22
【问题描述】:

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

我必须用唯一的属性标识每个对象,这没关系,但必须始终保持不变 => 它永远不会改变。

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

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

我知道在保存对象之前,它有一个“临时 id”,但一旦保存,它就会得到确定的。

我没有看到这个,从来没有。

当我导出时,只需获取所有数据并循环,我总是会得到一个新的引用:

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

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

谢谢,

r.

编辑

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

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

【问题讨论】:

  • 你为什么不想创建一个唯一的ID?如果有选择,我总是会选择这个选项!
  • 我不想有一个实体/表只是为了存储和增加一个计数器......

标签: iphone core-data


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

    我认为这可能是一个报告问题。您显示的应该是 URI/UUID 的数字很简单。

    They should look like:

    UUID(普遍唯一 标识符),也称为 GUID (全局唯一标识符)或 IID (接口标识符),是 128 位的 值保证是唯一的。一个 UUID 在空间和 时间通过组合一个唯一的值 它所在的计算机 生成——通常是以太网 硬件地址——和一个值 代表数量 自 10 月以来的 100 纳秒间隔 1582 年 15 月 15 日 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。它们绝对不会看起来像一个整数。

    【讨论】:

    • 好的,可能问题出在我取URIRepresentation的值的时候,我要再检查一遍再发帖!谢谢
    • @mongeta: 你在你的NSLog 函数中使用%d 而不是%@?如果是这样,那么您将看到 URL 的内存地址,而不是字符串表示形式。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-11
    • 2018-06-05
    • 1970-01-01
    • 2018-06-25
    • 2016-02-05
    • 2016-05-29
    • 1970-01-01
    相关资源
    最近更新 更多