【问题标题】:MVC-friendly approach to Core DataMVC 友好的 Core Data 方法
【发布时间】:2011-10-27 02:18:06
【问题描述】:

好的,所以我对 Core Data 还是很陌生,现在我开始深入研究它,我对实现它的正确方法有疑问。

我有一个从 appDelegate 加载的 parentViewController 对象。 parentView 是一个视图,它为另外三个 viewController 对象设置了一个分页 UIScrollView,它是孩子。视图加载完毕,我可以漂亮地在三个视图之间翻页。

所有三个视图都需要与 Core Data 进行大量数据交换。我是否应该将 managedObjectContext 的引用传递到 parentView 中的每个不同视图中,以便所有视图都可以从 Core Data 中提取和写入它们自己?还是应该将引用保留在parentView中,让孩子将请求传递给父母处理?

谢谢

【问题讨论】:

    标签: iphone objective-c model-view-controller core-data architecture


    【解决方案1】:

    我通常使用第三个选项,至少对于具有单个持久性存储的简单应用程序,我在应用程序的整个生命周期中都访问它:将 managedObjectContext 设置为应用程序委托的属性,并在应用程序启动时对其进行初始化。然后,您可以使用以下方式从应用程序中的任何位置访问它:

    MyApplicationDelegate *delegate = [[UIApplication sharedApplication] delegate];
    NSManagedObjectContext *moc = [delegate managedObjectContext];
    

    这种方法并不适合所有设计和架构,但我发现它对我来说效果很好,并且可以让我的代码保持相对干净。

    【讨论】:

      【解决方案2】:

      控制器不应该在 MVC 中直接相互通信。任何需要在控制器之间共享的数据都应该通过模型层进行共享,其中 MOC 是其中的一部分。因此,理想情况下,您应该将 MOC 传递给需要使用它的每个对象。完全可以让多个对象同时读取/写入同一个 MOC;尊重依赖注入的原则;并且可能要编写的代码更少。

      【讨论】:

      • 这是一个限制性的概括。当用户从主视图控制器中选择一个项目,然后显示一个详细视图控制器来编辑该项目时,情况会怎样?主视图控制器通常会与详细视图控制器通信以设置要编辑的项目。
      • @RobinSummerhill:在这种情况下,控制器只是来回传递必要的模型对象——这没有错。 没有发生的是,一个控制器没有尝试通过另一个控制器完成某些结果。每个控制器只对自己负责。我应该更清楚。
      猜你喜欢
      • 2016-06-26
      • 2021-12-13
      • 2017-03-24
      • 2012-09-16
      • 1970-01-01
      • 1970-01-01
      • 2013-02-14
      • 1970-01-01
      • 2014-06-21
      相关资源
      最近更新 更多