Objective c 两个托管对象上下文(一个通过setParent:嵌套,另一个通过setParent:嵌套),两个设置都使用NSMainQueueConcurrency:这明智吗?

Objective c 两个托管对象上下文(一个通过setParent:嵌套,另一个通过setParent:嵌套),两个设置都使用NSMainQueueConcurrency:这明智吗?,objective-c,core-data,ios5,nsmanagedobjectcontext,Objective C,Core Data,Ios5,Nsmanagedobjectcontext,我在iOS应用程序中使用了两个托管对象上下文。第一个上下文是第二个上下文的父上下文,利用ios5中引入的新嵌套托管上下文模型。这两个上下文都是使用NSMainQueueConcurrencyType创建的 我试图实现的是一种很好的方法来处理对数据的临时添加和编辑,这些数据可能会保存,也可能不会保存,并且具有逻辑区别,其中主控制器对象拥有第一个上下文(父级),子控制器拥有第二个上下文(子级)。因此,更改会冒泡出现,主控制器可以决定是否保存其上下文。我的上下文是嵌套的,这一事实要求使用限制模式(NS

我在iOS应用程序中使用了两个托管对象上下文。第一个上下文是第二个上下文的父上下文,利用ios5中引入的新嵌套托管上下文模型。这两个上下文都是使用NSMainQueueConcurrencyType创建的

我试图实现的是一种很好的方法来处理对数据的临时添加和编辑,这些数据可能会保存,也可能不会保存,并且具有逻辑区别,其中主控制器对象拥有第一个上下文(父级),子控制器拥有第二个上下文(子级)。因此,更改会冒泡出现,主控制器可以决定是否保存其上下文。我的上下文是嵌套的,这一事实要求使用限制模式(NSConfinementConcurrencyType)设置它们而不是

我的问题是:我试图实现的模式是否有缺陷?我刚刚从多篇文章中读到,在大多数情况下,在主线程上使用多个上下文可能不是最好的主意。我还很难确定在我的上下文中应该在哪里使用
performBlockAndWait:
。我是否应该在每次将消息发送到上下文时使用它,即使我确定当前正在主线程中执行?这是否包括我创建新NSManagedObject的地方,如:

    [theManagedObjectContext performBlockAndWait:^
    {
        id *myObj = [NSEntityDescription insertNewObjectForEntityForName:@"MyEntity" inManagedObjectContext:theManagedObjectContext];
        // more stuff done here
    }];
我对NSManagedObjects进行更改的地点如何?我是否也需要将它们包装在
performBlockAndWait:
中?我使用NSFetchedResultsController并向其发送
performFetch
消息的位置如何

我是否最好只使用一个上下文并弄清楚撤销管理器是如何工作的


据我所见,这些新核心数据功能的文档非常稀少……

我的理解是,在向未使用限制模式初始化的NSManagedObjectContext发送消息时,应始终使用块方法,
-performBlock:
-performBlock和wait:
。显然,您使用哪种方法将取决于您的需要


就使用
NSMainQueueConcurrencyType
初始化父级和子级而言,只有在子上下文连接到UI时才需要这样做。如果不是,那么创建这个子上下文来卸载一些不必要的工作最适合使用
NSPrivateQueueConcurrencyType
的私有线程。您已经在使用基于块的方法,因此所需的更改应该是最小的。

我的理解是,在向未使用限制模式初始化的NSManagedObjectContext发送消息时,您应该始终使用块方法,
-performBlock:
-performBlockAndWait:
。显然,您使用哪种方法将取决于您的需要


就使用
NSMainQueueConcurrencyType
初始化父级和子级而言,只有在子上下文连接到UI时才需要这样做。如果不是,那么创建这个子上下文来卸载一些不必要的工作最适合使用
NSPrivateQueueConcurrencyType
的私有线程。您已经在使用基于块的方法,因此所需的更改应该是最小的。

关于发送到NSManagedObject或NSFetchedResultsController实例的消息是否需要包装在performBlock/performBlockAndWait中的任何细节?在某些情况下,上下文可能会在下面获取消息。我只在performBlock:和performBlockAndWait:中包装发送到上下文的消息。如果你有一个开发者帐户,查看来自WWDC 2011的“核心数据中的新内容”视频。感谢您的建议-该视频的第一部分确实帮助我理解了一点关于发送到NSManagedObject或NSFetchedResultsController实例的消息是否需要包装在performBlock/performBlock and Wait中的任何见解?在某些情况下,上下文可能会在下面获取消息。我只在performBlock:和performBlockAndWait:中包装发送到上下文的消息。如果您有一个开发者帐户,请查看来自WWDC 2011的“核心数据中的新内容”视频。感谢您的建议-该视频的第一部分确实有助于阐明我的理解