Objective c 控制器是否应该知道iOS应用程序中的NSManagedObjectContext

Objective c 控制器是否应该知道iOS应用程序中的NSManagedObjectContext,objective-c,ios,model-view-controller,user-interface,core-data,Objective C,Ios,Model View Controller,User Interface,Core Data,在我正在重构的iOS应用程序中,我使用核心数据作为主要的持久层。我正在尝试重构以获得一个合适的MVC模式。但是,我一直在尝试从UI中删除NSManagedObject*对象,因为我认为模型应该是关注持久性层的 我正在努力决定是否应该允许UI保留NSManagedObjectContext,或者模型是否应该维护一个用于检索UI请求的信息的上下文,然后向UI返回一个哑对象(不是NSManagedObject)。根据我的经验,我倾向于让模型知道所有分离关注点的持久性,但我也很难证明这种模式的合理性 有

在我正在重构的iOS应用程序中,我使用核心数据作为主要的持久层。我正在尝试重构以获得一个合适的MVC模式。但是,我一直在尝试从UI中删除NSManagedObject*对象,因为我认为模型应该是关注持久性层的

我正在努力决定是否应该允许UI保留NSManagedObjectContext,或者模型是否应该维护一个用于检索UI请求的信息的上下文,然后向UI返回一个哑对象(不是NSManagedObject)。根据我的经验,我倾向于让模型知道所有分离关注点的持久性,但我也很难证明这种模式的合理性


有人能帮我弄清楚我应该做什么以及为什么吗?

从概念上讲,
NSPersistanceStoreCoordinator
是一堆
nsManagedObjectContext
作为
NSManagedObjects
的图形。您可以而且应该使用多个托管对象上下文在UI中执行与后台计算分离的任务。这将防止由于不同线程共享相同的
NSManagedObjectContext
而导致死锁

将信息保存到两个单独的NSManagedObjectContext时,需要使用将更改合并到其他线程上下文

- (void)mergeChangesFromContextDidSaveNotification:(NSNotification *)notification
总结自核心数据编程指南的部分内容。

从概念上讲,
NSPersistanceStoreCoordinator
是一堆
nsManagedObjectContext
作为
NSManagedObjects
的图形。您可以而且应该使用多个托管对象上下文在UI中执行与后台计算分离的任务。这将防止由于不同线程共享相同的
NSManagedObjectContext
而导致死锁

将信息保存到两个单独的NSManagedObjectContext时,需要使用将更改合并到其他线程上下文

- (void)mergeChangesFromContextDidSaveNotification:(NSNotification *)notification
总结自核心数据编程指南的部分内容。

经过深思熟虑、阅读和其他审查,我认为管制员了解上下文是可以接受的。上下文可以或多或少地用作模型,只要视图逻辑不知道它,它就不会违反MVC


我个人更愿意将上下文保存在服务层下,我确实尝试将它们隐藏在地下,但是拥有一个UI管理的对象上下文带来了极大的便利;只要确保您了解成本。

经过深思熟虑、阅读和其他审查,我决定让管制员了解上下文是可以接受的。上下文可以或多或少地用作模型,只要视图逻辑不知道它,它就不会违反MVC


我个人更愿意将上下文保存在服务层下,我确实尝试将它们保存在地下,但是拥有一个UI管理的对象上下文会带来极大的便利;确保您了解成本。

在这种情况下,您所说的用户界面是什么意思?一种常见模式是将NSManagedObjectContext传递给UIViewController。从那里,您可以使用NSManagedObjects本身在视图上设置属性。控制器(UIViewController)正在管理模型层和视图(UIViewController的视图)之间的桥梁。在这种情况下,UI是什么意思?一种常见模式是将NSManagedObjectContext传递给UIViewController。从那里,您可以使用NSManagedObjects本身在视图上设置属性。控制器(UIViewController)正在管理模型层和视图(UIViewController的视图)之间的桥梁。这是否回答了您的问题?否。我知道如何在线程中使用多个上下文并划分工作,但我对控制器级别的领域知识有一个强烈的问题。在UI抽象中添加上下文似乎是一种非常糟糕的模式。这回答了你的问题吗?没有。我知道如何在线程中使用多个上下文并划分工作,但我对控制器级别的领域知识有一个强烈的问题。将上下文放到UI抽象中似乎是一种非常糟糕的模式。