我想使用单例UIApplication来访问AppDelegate的managedObjectContext。但是当我写作
[[[UIApplication sharedApplication] delegate] managedObjectContext]
或
[[[UIApplication sharedApplication] delegate] __managedObjectContext]
它不起作用。
但这条线很好用:
NSLog(@"Seeking for the AppDelegate : %@", [[[UIApplication sharedApplication] delegate] class]);
你有解决方案吗? 尼尔斯
答案 0 :(得分:11)
使用像这样的单例是不好的做法,甚至在Core Data文档中明确表示不鼓励:
视图控制器通常不应该 从全局中检索上下文 诸如应用程序之类的对象 代表。这倾向于使 应用程序架构刚性 视图控制器也不应该 通常为自己创建一个上下文 使用。这可能意味着操作 使用控制器执行 上下文未在其他地方注册 上下文,所以不同的观点 控制器会有所不同 对数据的看法。
创建视图控制器时,您 传递一个上下文。你通过了 现有背景,或(在某种情况下) 您想要新控制器的位置 管理一组新的编辑 您为其创建的上下文。它的 通常是责任 应用程序委托创建一个 传递给第一个视图的上下文 显示的控制器。
依赖注入(即给予视图控制器它需要的东西)在几乎所有情况下都更好。在应用程序的代码中看到[[UIApplication sharedApplication] delegate]
真的不好,因为它会使代码难以重用,难以编写测试等等。
答案 1 :(得分:7)
尝试将其投射到您的实际应用代理实施中,例如
[(MyAppDelegate *)[[UIApplication sharedApplication] delegate] managedObjectContext];
并添加
#import "MyAppDelegate.h"
位于文件顶部。