gpt4 book ai didi

objective-c - 查找或创建唯一的核心数据实体

转载 作者:太空狗 更新时间:2023-10-30 03:20:47 24 4
gpt4 key购买 nike

核心数据驱动应用的一个常见场景是从后备存储中获取一个唯一的对象。如果具有特定唯一属性的对象存在,则返回该对象,如果不存在,则返回新创建的对象。我发现自己一遍又一遍地写同样的东西,所以我把它包装在一个方便的方法中。但这似乎微不足道,我是不是在这里重新发明轮子?是否有更简单、开箱即用的方法来实现这一目标?

干杯,
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];

最佳答案

相当标准。我的核心数据实体有很多方法,例如 [aStudent enrollmentForId:(long long)idValue createIfMissing:YES]

我也想插mogenerator ,这消除了 Core Data 的许多痛苦。除其他外,它为数据模型中定义的每个获取请求生成一个工厂方法。因此,在模型中创建一个获取谓词,例如,

thingies: thingyId == $forThingyId

产生一个匹配的类方法:

+(NSArray *)fetchThingies:(NSManagedObjectContext *)moc forThingyId:(id)thingyId

...这是您在上面写的内容的前半部分。像这样的包装器

-(Thingy*)thingyForIdValue:(long long)thingyId

然后编写起来很简单,在任何拥有您的 managedObjectContext 的类中(例如,“父”实体,或应用程序委托(delegate),或其他任何东西。)

关于objective-c - 查找或创建唯一的核心数据实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4974186/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com