我的应用程序是否适合拥有多个托管对象上下文?我正在走这条路,(从我的MOC从UIViewController子类的一个实例传递到下一个,但是我开始遇到EXC_BAD_ACCESS错误,我想知道它是否相关。
那么,我什么时候想要使用多个ManagedObjectContexts?(何时)我应该只使用一个?
修改
在我基于UISplitViewController
的应用中,当在主视图中显示第二个视图后,在我的主视图中删除行时,仅 ,我的详细视图控制器在{{1我永远不会打电话给你。
编辑2:
基本上,我有一个主视图和一个详细视图。在详细视图中,用户按下按钮。该按钮显示“新交易”视图。我没有以模态方式呈现视图,而是手动将其添加到详细视图中。如果用户在此新视图中更改了托管对象上下文,然后尝试删除主视图中的行,则会导致崩溃。如果我以模态方式呈现相同的视图,一切正常。
此外,NSZombieEnabled表示正在(父)详细信息视图上调用respondsToSelector
方法。我不会在我的应用程序中的任何地方打电话。这可能是一个记忆问题吗?线程问题?我没有显式创建任何新线程,但我不知道是否在幕后创建了任何线程。
可能是什么问题?
EDIT3:
这个问题似乎变得更好了。在我的详细视图中,我还有一个表,与主视图一样,它使用NSFetchedResults控制器。当我删除单元格时,我也隐藏了详细视图,导致它被释放。释放详细信息视图会导致应用崩溃。如果我不删除详细信息视图,则会删除详细信息视图表中的事务。 (这是因为我将Core Data设置为在删除帐户时级联。)
那么,也许我有太多respondsToSelector
个对象?我相信发生的事情如下:
当我删除一行时,NSFetchResultsController值会发生变化,因此它会尝试触发委托方法。但是,详细视图已被删除,并且视图控制器已取消分配。因此,委托系统触发controllerDidChange方法,并在尝试将通知传递给详细信息视图时崩溃。
我该如何解决这个问题?
答案 0 :(得分:4)
一般来说,你应该只使用一个,除非你需要从多个线程访问数据,在这种情况下你需要每个线程一个。
你当然不需要为每个UIViewController创建一个。
您可能还想重新考虑是否应该将整个托管对象上下文传递给UIViewController - 如何只传递它需要的模型对象来完成它的工作?