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