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

时间:2010-06-07 21:24:30

标签: iphone xcode

嘿,我想做的是创建一个int,它将成为实体的ID,并在添加新实体时自动递增(就像SQL标识属性一样)。这可能吗?我尝试使用索引(检查属性)但是没有描述索引甚至是什么。

编辑:

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

2 个答案:

答案 0 :(得分:0)

这种概念违背了核心数据的原则 - 这个想法是你要管理具有属性的实体集,而不是数据库中的行或其他需要单独使用的东西。 (如果您使用的是SQLite商店,Core Data会在幕后为您创建一个ID,但您无法访问它。)

您应该重新考虑(或至少提供更多有关您正在尝试解决的问题的详细信息),因为就目前而言,Core Data不会让您自动增加变量。

如果绝对必须,可以通过在实体上添加一些NSNumber ID字段来手动增加插入,然后每次插入新实体时,获取按该ID排序的现有实体,并限制为一个结果(使用带有各种选项的NSFetchRequest),获取该实体的ID,添加一个ID,并将其设置为新实体的ID。不过,这是很多工作,而且可能容易出错。

编辑:根据额外的信息,我会说,而不是尝试自己自动增加ID,找到注释的其他保证唯一属性,并直接使用它或写一个哈希使用它来生成唯一ID的函数。例如,使用纬度&经度构建一个唯一表示系统中该点的整数。除此之外,没有必要自己增加ID。

我同意这是一个棘手的问题 - 我之前从未在Core Data中遇到类似这样的事情,我可以看到自动增量可能有用的地方:)

答案 1 :(得分:0)

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

  1. 在您的实体中创建“索引”属性。使它成为一个字符串
  2. 创建新的时,使用CFUUIDCreate()和CFUUIDCreateString()生成GUID
  3. 将GUID分配给“index”属性
  4. Voila,您现在拥有一个近乎完美的唯一ID,可以在本地缓存并根据需要使用

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