コア データ ドリブン アプリの一般的なシナリオは、バッキング ストアから一意のオブジェクトを取得することです。特定の一意のプロパティを持つオブジェクトが存在する場合は、そのオブジェクトを返します。新しく作成されたオブジェクトを返さない場合は、それを返します。同じことを何度も書いていることに気がついたので、便利なメソッドでラップしました。しかし、これはとても些細なことのように思えます。これを達成するためのより簡単ですぐに使える方法はありますか?
乾杯、
EP
+(id)uniqueEntityfForName:(NSString *)name
withValue:(id)value
forKey:(NSString *)key
inManagedObjectContext:(NSManagedObjectContext *)context {
NSFetchRequest *request = [[[NSFetchRequest alloc] init] autorelease];
request.entity = [NSEntityDescription entityForName:name inManagedObjectContext:context];
request.predicate = [NSPredicate predicateWithFormat:[key stringByAppendingString:@" == %@"], value];
NSArray *result = [context executeFetchRequest:request error:nil];
id entity = [result lastObject];
if (entity == nil) {
entity = [NSEntityDescription insertNewObjectForEntityForName:name inManagedObjectContext:context];
[entity setValue:value forKey:key];
} else {
entity = [result lastObject];
}
return entity;
}
私はこの方法を次のように使用します。
SomeEntity *entity = [CDUtils uniqueEntityfForName:@"SomeEntity" withValue:@"foo" forKey:@"bar" inManagedObjectContext:context];