在execute()
上调用NSFetchRequest
时,如果获取请求不知道NSManagedObjectContext
,则会收到错误消息。提供该上下文的一种方法是在传递给execute
的块中调用managedObjectContext.perform()
。
以某种方式,获取请求能够确定上下文是什么。我假设它必须在某处查看线程局部变量。我想将这个机制用于我自己的邪恶目的,但对于我的生活,我无法弄清楚这个上下文的存储位置。
有什么想法吗?
答案 0 :(得分:0)
它没有记录,依赖私有API。
创建托管对象上下文时,请指定.mainQueueConcurrencyType
或.privateQueueConcurrencyType
。这告诉上下文要使用哪种队列,主队列或私有调度队列。
当您execute()
获取请求时,它使用" ...与当前队列关联的托管对象上下文执行。"这是创建上下文的队列,主要或私有。
它如何知道哪个队列?它没有记录,依赖于一些不暴露给Apple以外的开发人员的内部手段。很可能它会向DispatchQueue
询问当前队列(未记录),然后通过特定于队列的数据查找上下文。您可以通过在调试代码时查看当前队列来发现一些相关信息(没有API可以获得它,但调试器知道)。从那里,您可以使用DispatchQueue
方法找到上下文,可能是getSpecific<T>(key: DispatchSpecificKey<T>)
。
但那很多&#34;可能&#34;和&#34;也许&#34;并且您通过文档化的API找不到任何内容。