神奇的记录:在后台线程中获取数据时崩溃
Magical Record: crash when fetching data in background thread
我在后台(非主)线程中执行 MR_findFirstWithPredicate
时随机崩溃。我在主线程和后台线程上使用 NSManagedObjectContext.MR_defaultContext()
进行所有神奇的记录操作 - 我认为这是问题的根源,但我不确定如何解决它。
当我在后台线程中执行操作时,我应该使用其他上下文吗?我尝试使用 NSManagedObjectContext.MR_context
但所有提取都返回 nil。还尝试了 NSManagedObjectContext.MR_newPrivateQueueContext
但应用程序在每次提取操作时崩溃。
你是对的,你应该使用 NSPrivateQueueConcurrencyType 的上下文来做后台。听起来 MR_newPrivateQueueContext 是正确的调用,但您可能必须给它一个持久存储或 parentContext。在这种情况下,您可以将 MR_newPrivateQueueContext parentContext 设置为 defaultContext
let defaultContext = NSManagedObjectContext.MR_defaultContext()
let privateContext = NSManagedObjectContext.MR_newPrivateQueueContext
privateContext.parentContext = defaultContext
我在后台(非主)线程中执行 MR_findFirstWithPredicate
时随机崩溃。我在主线程和后台线程上使用 NSManagedObjectContext.MR_defaultContext()
进行所有神奇的记录操作 - 我认为这是问题的根源,但我不确定如何解决它。
当我在后台线程中执行操作时,我应该使用其他上下文吗?我尝试使用 NSManagedObjectContext.MR_context
但所有提取都返回 nil。还尝试了 NSManagedObjectContext.MR_newPrivateQueueContext
但应用程序在每次提取操作时崩溃。
你是对的,你应该使用 NSPrivateQueueConcurrencyType 的上下文来做后台。听起来 MR_newPrivateQueueContext 是正确的调用,但您可能必须给它一个持久存储或 parentContext。在这种情况下,您可以将 MR_newPrivateQueueContext parentContext 设置为 defaultContext
let defaultContext = NSManagedObjectContext.MR_defaultContext()
let privateContext = NSManagedObjectContext.MR_newPrivateQueueContext
privateContext.parentContext = defaultContext