gpt4 book ai didi

ios - Coredata performBlock 然后返回新值

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:25:29 26 4
gpt4 key购买 nike

如果我使用 performBlock 保存 managedObjectContext,如何返回保存在 coredata 中的新对象?

需求是,在coredata中添加一个entry,并返回。我的代码是这样的:

//create a privateMOC
NSManagedObjectContext *private = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType];

//set parentContext
[private setParentContext:self.coredataManager.managedObjectContext];

__block Detail *object = nil;

[private performBlock:^{
//fetch from the db
object = [self.coredataManager insertObjectWithEntityName:NSStringFromClass([Detail class])];

//save the private context
NSError *error = nil;
if (![private save:&error]) {
NSLog(@"Error saving context: %@\n%@", [error localizedDescription], [error userInfo]);
}

}];

return object;

这里由于保存发生在 block 中,返回将首先执行。但我需要具有最新值的object。请提出任何建议。

最佳答案

与其返回新创建的 Core Data 对象,不如向构造函数方法传递一个带有您正在创建的对象类型参数的 block 。

在托管对象上下文的 performBlock: block 中创建对象后,调用您的 completion block 并传入新构造的核心数据对象。

+ (void)coreDataObjectWithJSON:(NSDictionary *)json completion:(void (^)(NSYourCoreDataObject *coreDataObject))completion {

[yourManagedObjectContext performBlock:^{

NSEntityDescription *entity = [NSEntityDescription entityForName:... inManagedObjectContext:...];

NSYourCoreDataObject *coreDataObject = [[NSYourCoreDataObject alloc] initWithEntity:entity insertIntoManagedObjectContext:...];

if (completion) {
// "return" the new managed object
completion(coreDataObject);
}
}];
}

关于ios - Coredata performBlock 然后返回新值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33563578/

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