Обычный сценарий для приложений, управляемых основными данными, - получение уникального объекта из резервного хранилища. Если объект с определенным уникальным свойством существует, верните его, если он не вернет вновь созданный. Я обнаружил, что пишу одно и то же снова и снова, поэтому я обернул это удобным методом. Но это кажется таким тривиальным, неужели я изобретаю велосипед здесь? Есть ли более простой способ достичь этого нестандартно?
Ура,
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];