泰达内,
当您需要检查一个对象是否已经存在时,您需要设置一个获取请求并使用特定的谓词。在你的情况下,你可以简单地获取反对Ville
,看看你是否 idV
已经有了。我想idV
这就像您的Ville
. 检查nom
可能是相同的,但您可以cities
在世界上两个不同的地方有两个同名。
@alpz解决方案没问题。此外,您还可以将 fecth 限制设置为 1:
[request setFetchLimit:1];
否则你可以简单地做
NSUInteger count = [context countForFetchRequest:request error:&error];
if(count == 0) {
// add the new city here
}
代替
NSArray *results = [context executeFetchRequest:request error:nil];
@Phillip Mills说您可以使用NSManagedObject
子类而不是使用键值编码访问。我认为使用类的属性而不是纯字符串键更容易。
所以,一旦你创建了一个Ville
子类(organising-core-data-for-ios),你就可以为它创建一个类别,叫做Ville+Extension
,然后创建一个类似下面的方法:
+ (Ville *)villeWithUniqueName:(NSString *)name withManagedObjectContext:(NSManagedObjectContext*)context
{
NSFetchRequest * request = [[NSFetchRequest alloc] init];
[request setEntity:[NSEntityDescription entityForName:@"Ville" inManagedObjectContext:context]];
[request setPredicate:[NSPredicate predicateWithFormat:@"nom = %@", name];
[request setFetchLimit:1];
NSArray *results = [context executeFetchRequest:request error:nil];
Ville* theVille = nil;
if ([results count] == 0)
{
theVille = // create the new here
}
else
{
theVille = (Ville*)[results objectAtIndex:0];
}
[request release]; // if you don't use ARC
return theVille;
}
然后,使用该类别(在导入后),例如:
Ville* theVille = [Ville villeWithUniqueName:@"yourName" withManagedObjectContext:yourContext];
希望有帮助。