代码之家  ›  专栏  ›  技术社区  ›  Mausimo

如何在Xcode管理对象模型中创建自动递增的属性

  •  1
  • Mausimo  · 技术社区  · 15 年前

    嘿,我要做的是生成一个int,它将成为实体的ID,并且在添加新实体时自动递增(就像SQL标识属性一样)。这有可能吗?我尝试使用索引(选中属性),但是没有描述索引的功能。

    编辑:

    我正在向地图添加注释,当您单击“固定”时,带有V形符号的注释视图将显示出来。现在,当您单击此按钮时,我想加载一个相关联的图片。但是,我知道如何将图片链接到此按钮的唯一方法是为图片提供一个唯一的ID,然后将button.tag设置为此ID,然后根据button.tag加载。

    2 回复  |  直到 11 年前
        1
  •  0
  •   Tim    15 年前

    这种概念与核心数据的原则是相反的——其思想是,您管理的是一组具有属性的实体,而不是数据库中的行或其他需要唯一化的东西。(如果您使用的是sqlite存储,核心数据将在幕后为您创建一个ID,但您无法访问它。)

    您可能应该重新考虑(或者至少提供更多关于)您正试图解决的问题,因为就目前而言,核心数据不会让您自动增加变量。

    如果您必须这样做,您可以在插入时手动增加一些nsnumber ID 实体上的字段,然后每次插入新实体时,根据该ID对现有实体进行排序并限制为一个结果(使用具有各种选项的nsfetchRequest),获取该实体的ID,添加一个,并将其设置为新实体的ID。尽管如此,这项工作很多,而且可能容易出错。

    编辑: 基于这些额外的信息,我想说,与其自己自动增加一个ID,不如找到注释的其他有保证的唯一属性,直接使用它,或者编写一个哈希函数,使用它来生成唯一的ID。例如,使用纬度和经度来构建一个唯一表示指向你的系统。除此之外,没有办法自己增加ID。

    我同意这是一个棘手的问题-我以前从未在核心数据中遇到过类似的问题,我可以看到自动增量在哪里可能有用:)

        2
  •  0
  •   karlostprogrammer    11 年前

    这是最简单的方法,但需要一些努力。

    1. 在实体中创建“index”属性。把它做成一根绳子
    2. 创建新的GUID时,请使用cfuuidCreate()和cfuuidCreateString()生成一个GUID。
    3. 将guid分配给“index”属性

    瞧,您现在有了一个近乎完美的唯一ID,可以随时用于本地缓存和根据需要使用。

    CFUUIDRef uuidRef = CFUUIDCreate(kCFAllocatorDefault);
    CFStringRef uuidStringRef = CFUUIDCreateString(kCFAllocatorDefault, uuidRef);
    NSString* guidString = [NSString stringWithString:(__bridge NSString*)uuidStringRef];