Çekirdek verileri temelli uygulamalar için ortak bir senaryo, yedekleme deposundan benzersiz bir nesne alıyor. Belirli bir benzersiz özelliğe sahip nesne varsa, yeni bir tane oluşturmazsa onu iade edin. Kendimi aynı şeyi tekrar tekrar yazarken buldum, bu yüzden bir kolaylık yöntemine sardım. Ama bu çok önemsiz görünüyor, ben tekerleği yeniden icat ettim mi? Bunu başarmak için daha basit, kullanıma hazır bir yol var mı?Benzersiz Çekirdek Veri varlığı bul veya oluştur
alkış
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;
}
böyle bu yöntemi kullanmak:
SomeEntity *entity = [CDUtils uniqueEntityfForName:@"SomeEntity" withValue:@"foo" forKey:@"bar" inManagedObjectContext:context];
geçerli görünüyor. GC olmayan projeler için kullanıldığında olası bellek sızıntısı vardır, çünkü 'request' – diederikh
Tamamen serbest bırakmıyorsunuz! Bellek bırakmaya hala tutarlı olmalıyım. Kodu güncellemek. – epologee
Oldukça standart. Temel veri varlıklarım, [aStudent kayıtForId: (uzun uzun) idValue createIfMissing: YES] gibi birçok yönteme sahiptir. Çekirdek Verilerden daha fazla acı çeken http://rentzsch.github.com/mogenerator/ mogenerator'unu da takmak istiyorum. Diğer şeylerin yanı sıra, veri modelinde tanımlanan her getirme isteği için bir fabrika yöntemi oluşturur. Bu nedenle, örneğin, "thingyId == $ forThingyId" gibi bir getirme yordamı yapmak, eşleşen bir sınıf yöntemi sağlar: + (NSArray *) fetchThingies: (managedObjectContext *) moc forThingyId: (id) thingyId, ne ilk ne yapar orada yazdın. – rgeorge