我正在制作一个使用核心数据的应用程序。 现在,我需要创建一个与我们在sqlite(自动增量类型)中创建的主键相同的主键。 核心数据是否可行。如果是,那么如何进行任何链接或建议,以便如何进行。
此致 Mrugen
答案 0 :(得分:4)
由于核心数据是一个持久性框架而不是通用数据库,因此它抽象了主键。
答案 1 :(得分:4)
CoreData不是数据库,而是它的对象关系映射解决方案。它是一个对象持久层。 CoreData中没有主键或外键的概念。
如果要在两个实体之间建立关系。您将定义一个关系,CoreData负责处理该关系的存储方式。
选择一个实体,使用实体属性列表底部的加号按钮,选择添加关系,从下拉列表中选择目标实体。
选择目标实体并以相同方式定义反向关系。
答案 2 :(得分:2)
答案是否定的。 为了达到类似的目的, 表格中可以有一个“id”字段,在插入表格之前获取“id”的最大值,然后将值加1。
使用表ENTITY_USER(用户)中的“userID”字段获取最高用户ID。
+ (NSInteger) getMaxUserID
{
NSFetchRequest *request = [[NSFetchRequest alloc] init];
NSEntityDescription *res = [NSEntityDescription entityForName:ENTITY_USER
inManagedObjectContext:[DataBaseManager sharedInstance].managedObjectContext];
[request setEntity:res];
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"userID" ascending:NO];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];
[request setSortDescriptors:sortDescriptors];
[sortDescriptors release];
[sortDescriptor release];
[request setFetchLimit:1];
NSError *error = nil;
NSArray *results = [[DataBaseManager sharedInstance].managedObjectContext executeFetchRequest:request error:&error];
[request release];
if (results == nil) {
NSLog(@"error fetching the results: %@",error);
}
NSInteger maximumValue = 0;
if (results.count == 1) {
CDUser *result = (CDUser *)[results objectAtIndex:0];
maximumValue = [result.userID integerValue];
}
return maximumValue;
}
答案 3 :(得分:2)
难道你不能只使用NSManagedObject的objectID属性吗?这将为您提供对象的唯一引用。