Singleton managedObjectContext

时间:2011-07-08 09:47:11

标签: iphone ios singleton nsmanagedobjectcontext application-singleton

我想使用单例UIApplication来访问AppDelegate的managedObjectContext。但是当我写作

[[[UIApplication sharedApplication] delegate] managedObjectContext]

[[[UIApplication sharedApplication] delegate] __managedObjectContext]

它不起作用。

但这条线很好用:

NSLog(@"Seeking for the AppDelegate : %@", [[[UIApplication sharedApplication] delegate] class]);

你有解决方案吗? 尼尔斯

2 个答案:

答案 0 :(得分:11)

使用像这样的单例是不好的做法,甚至在Core Data文档中明确表示不鼓励:

http://developer.apple.com/library/ios/#documentation/DataManagement/Conceptual/CoreDataSnippets/Articles/stack.html

  

视图控制器通常不应该   从全局中检索上下文   诸如应用程序之类的对象   代表。这倾向于使   应用程序架构刚性   视图控制器也不应该   通常为自己创建一个上下文   使用。这可能意味着操作   使用控制器执行   上下文未在其他地方注册   上下文,所以不同的观点   控制器会有所不同   对数据的看法。

     

创建视图控制器时,您   传递一个上下文。你通过了   现有背景,或(在某种情况下)   您想要新控制器的位置   管理一组新的编辑   您为其创建的上下文。它的   通常是责任   应用程序委托创建一个   传递给第一个视图的上下文   显示的控制器。

依赖注入(即给予视图控制器它需要的东西)在几乎所有情况下都更好。在应用程序的代码中看到[[UIApplication sharedApplication] delegate]真的不好,因为它会使代码难以重用,难以编写测试等等。

答案 1 :(得分:7)

尝试将其投射到您的实际应用代理实施中,例如

 [(MyAppDelegate *)[[UIApplication sharedApplication] delegate] managedObjectContext];

并添加

#import "MyAppDelegate.h"

位于文件顶部。