Singleton Core Data Manager可用于所有Navigation Controller嵌入式视图

时间:2012-02-10 04:28:32

标签: ios core-data uiviewcontroller uinavigationcontroller

我想知道我的CoreData管理器与我的观点交互的方式是否正确/最好/最有效。

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

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

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

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

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

感谢。

1 个答案:

答案 0 :(得分:0)

直到最近,我还使用了马特加拉格尔的合成单身人士来做同样的事情。

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

static MMPersistentStoreController *sharedMMPersistentStoreController = nil;

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

    return sharedMMPersistentStoreController; 
 }

我认为这是一种非常标准的方法。当然,它比在任何地方传递物体更好。

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

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