单例核心数据管理器可用于所有 UINavigationController 嵌入式视图

Posted

技术标签:

【中文标题】单例核心数据管理器可用于所有 UINavigationController 嵌入式视图【英文标题】:Singleton CoreData manager available to all UINavigationControllers embedded views 【发布时间】:2012-02-10 04:28:32 【问题描述】:

我想知道我的 CoreData 管理器与我的视图交互的方式是否是正确/最佳/最有效的方式。

我使用标准的单例模式(Apple 示例)来存放我的 CoreData 堆栈。它还包含用于 Web 服务和其他辅助方法的实用程序。

有一个 UINavigation 控制器有 2 个 viewController,一个 tableViewController 和另一个 viewController 以编程方式创建的 viewController。

前两个视图控制器分别是设置(Web 服务地址等)和登录。我马上跳到登录视图(第二个视图)。成功登录后,将推送 tableView。在选择单元格时,会以编程方式创建视图并推送。

这些视图中的每一个都需要数据存储,因此在它们的 viewDidLoad 中,我正在抓取单例。

这是做事的方式吗?其他想法是什么?导航控制器可以向所有嵌入的视图公开属性吗?

谢谢。

【问题讨论】:

您是在文章末尾提出所有三个问题,还是(正如我正在阅读您的问题)您是否在询问将信息从一个视图控制器移动到另一个视图控制器的最佳方式? 我在问最后三个问题。我能够很好地移动信息,并且我当前的解决方案有效,但这是我的第一个 ios 项目。基本上,只是想知道我的 CoreData/view 架构是否“看起来正确”。 【参考方案1】:

直到最近我才使用 Matt Gallagher 的合成单例来做你提到的同样的事情。

但是,最近我将项目转换为使用 ARC,因此单例设置有所简化。现在我有:

static MMPersistentStoreController *sharedMMPersistentStoreController = nil;

+ (MMPersistentStoreController *)sharedMMPersistentStoreController 
    if (sharedMMPersistentStoreController == nil)
    
        sharedMMPersistentStoreController = [[self alloc] init];
    

    return sharedMMPersistentStoreController; 
 

我认为这是一种非常标准的方法。当然,这比到处传递对象要好。

至于替代方案,我想您可以将synthesize 作为您的应用程序委托的property,然后通过UIApplication 访问它。

使用前一种方法,它是由MMPersistentStoreController 类对象创建的静态实例。对于后者,实例是一个对象的ivar,在您的应用程序中只存在一次。

【讨论】:

我认为苹果劝阻人们不要使用核心数据单例...有什么特别的原因吗? 具体原因是什么?谢谢

以上是关于单例核心数据管理器可用于所有 UINavigationController 嵌入式视图的主要内容,如果未能解决你的问题,请参考以下文章

如何将现有的单例表视图数据保存在核心数据中?

搞清楚 Python 的迭代器可迭代对象生成器

搞清楚 Python 的迭代器可迭代对象生成器

0012 - YARN三种资源调度器解析

带有核心数据对象的 NSArray 的单例 null

我应该将 appDelegate 用于所有单例样式的应用程序级代码吗?