0

我正在尝试添加unique values到我的sqlite数据库中。

我试图在其中创建独特的属性,.xcdatamodeld但没有成功。

这部分代码terminaison在 Table中添加了所有内容F016Terminaison。我怎样才能只添加unique terminaison values

for (NSString *terminaison in [[verbe objectForKey:temps] objectForKey:@"terminaison"])
{
    F016Terminaison *newTerminaison = [NSEntityDescription insertNewObjectForEntityForName:@"F016Terminaison" inManagedObjectContext:self.managedObjectContext];
    newTerminaison.name = terminaison;               
}
4

2 回答 2

1

每次调用insertNewObjectForEntityForName都会创建一个新对象并将其插入到托管对象上下文中。

如果您只想要唯一值,则必须首先检查具有该值的对象是否已经存在。这是通过NSFetchRequest一个谓词来完成的

[NSPredicate predicateWithFormat:@"name == %@", terminaison];

如果您必须插入许多值,那么首先从新列表中获取具有值的所有对象而不是许多获取请求更有效。

比较《Core Data Programming Guide》中的“Implementing Find-or-Create Efficiently ”。

于 2013-07-15T16:39:44.447 回答
1

您需要进行 fetch 以查找对象的现有实例,如果不存在则添加它。

例如:

// assumes your object has a "uniqueAttribute" and you supply a uniqueValue to test
NSPredicate * predicate = [NSPredicate predicateWithFormat:@"uniqueAttribute == %@", uniqueValue];
NSFetchRequest * fetchRequest = [[NSFetchRequest alloc] init];
[fetchRequest setPredicate:predicate];
[fetchRequest setFetchLimit:1];
NSError * error = nil;
NSArray * results = [managedObjectContext executeFetchRequest:fetchRequest error:&error];
if ([results count] == 1) {
    id existingObject = [results objectAtIndex:0];
    // do something with existing object
}
else if (results) {
    // create a new object
}
else {
    NSLog(@"executeFetchRequest returned error: %@ (userInfo: %@)", [error localizedDescription], [error userInfo]);
}
于 2013-07-15T16:40:07.823 回答