我们可以在核心数据中定义自动增量属性吗?

时间:2010-11-03 05:59:46

标签: iphone

您好我在我的应用程序中使用核心数据,并希望在每个实体中将ID属性设置为自动增量。核心数据是否可能?或者我必须手动插入条目并以编程方式管理增量?

3 个答案:

答案 0 :(得分:38)

如果您正在考虑主键的ID,则核心数据会为您处理此问题。在每个对象上都有一个objectID属性,您可以访问该属性以查看它。从托管对象上下文创建对象时,核心数据会分配临时ID。从托管对象上下文提交更改时,核心数据会分配一个永久ID。我不认为手动尝试设置它是个好主意。

阅读this stackoverflow thread了解详情。

答案 1 :(得分:1)

我使用NSFetchedResultsController

首先排序:

fetchRequest.sortDescriptors = [NSSortDescriptor(key: "id", ascending: false)]

然后在添加对象方法:

// Minimum id value
var recordID = 1
if let lastRecordID = fetchedResultsController.fetchedObjects?.first?.id {
    recordID = Int(lastRecordID) + 1
}

let newRecord = Record(context: persistentContainer.viewContext)
newRecord.id = Int32(recordID)

答案 2 :(得分:-1)

你可以这样做 之后

<div id="container">
  <div id="form">
    <form action="#" class="entypo-search active">
      <fieldset>
        <input id="search" placeholder="Search" />
      </fieldset>
    </form>
  </div>
</div>

目标-C:

saveContext()

夫特:

- (int)getAutoIncrement {
    int number = 0;
    NSURL *url = [[self objectID] URIRepresentation];
    NSString *urlString = url.absoluteString
    NSString *pN = [[urlString componentsSeparatedByString:@"/"] lastObject];
    if ([pN containsString:"p"]){
        NSString *stringPart = [pN stringByReplacingOccurrencesOfString:@"p" withString:@""]
        number = stringPart.intValue
    }
    url = nil;
    urlString = nil;
    pN = nil;
    stringPart = nil;
    return number;
}