【发布时间】:2016-02-07 09:50:56
【问题描述】:
如果我使用performBlock 保存 managedObjectContext,如何返回 coredata 中保存的新对象?
要求是,在coredata中添加一个条目,并返回它。我的代码是这样的:
//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 中进行的,因此将首先执行 return。但我需要具有最新值的object。请有任何建议。
【问题讨论】:
-
您不想使用
performBlockAndWait。它会导致调用线程阻塞,如果不小心处理,可能会导致死锁问题。一般来说,你应该避免performBlockAndWait,除非没有其他解决方案。我发现这非常罕见。此外,无论如何,您不能对要在另一个performBlock之外返回的对象执行任何操作,除非可能将其存放在某处以供以后参考。那么,为什么要退货呢?为什么不在performBlock中做任何你想做的事情? -
新创建的值被传递到包括后台应用程序/进程在内的几个地方。
-
@JodyHagins:请看我的评论
-
为什么不能从
performBlock代码内部“传递到多个地方”? -
是的,但我的意思是您不需要返回任何东西。没有理由等待它完成并返回一些东西。您应该能够在该块内做您想做的事情。
标签: ios objective-c core-data nsmanagedobjectcontext nsthread