【问题标题】:Passing around an NSManagedObjectContext传递一个 NSManagedObjectContext
【发布时间】:2014-07-17 00:26:09
【问题描述】:

我的核心数据堆栈像往常一样在 AppDelegate 中设置。我是一个优秀的 OO 公民,并且认识到通过 [[UIApplication sharedApplication] delegate] managedObjectContext] 直接访问它(或将其移动到某个单例)是全局状态/代码异味/顽皮。

但是需要访问数据的控制器大约有五层深。中间有容器控制器和模式和熊。我是否应该简单地将上下文传递到每一层,以便最后一个屏幕可以吐出实体列表?这似乎限制了可重用性、增加了复杂性并降低了可理解性。

【问题讨论】:

  • 如果需要数据的控制器有五层深,它是否是分层控制器结构的一部分 - 即 - 控制器是否从“父”继承并在顶部从“根”继承“ 控制器?如果是这样,您可以基于 AppDelegate MOC 为该“根”控制器设置公共 MOC,然后默认情况下由所有“子”控制器继承。

标签: ios objective-c cocoa-touch core-data


【解决方案1】:

是的,您应该按照 Apple 的建议传递它。但是,在某些情况下,我一直很懒惰,只是从 App 委托中获取了它,因为我没有做任何多线程计算。我大部分时间都尝试遵守 Apples 的指导方针,并确保我默认传递上下文,所以如果我需要它更低,我有它。

“视图控制器通常不应该从全局对象(例如应用程序委托)中检索上下文——这会使应用程序架构变得僵化。”

查看苹果推荐的iOS信息https://developer.apple.com/library/ios/documentation/DataManagement/Conceptual/CoreDataSnippets/Articles/stack.html

【讨论】:

    【解决方案2】:

    Magical Record,它为各种Core Data典型用例提供了很多便捷的方法。

    有了它,您无需手动跟踪您的上下文,便捷的方法会以线程安全的方式自动访问它(它们)。

    它还支持后台模型保存和更少的样板提取。

    【讨论】:

    • 一些 Magical Record 仇恨者投反对票。 :D
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多