首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >单例managedObjectContext

单例managedObjectContext
EN

Stack Overflow用户
提问于 2011-07-08 17:47:11
回答 2查看 3.3K关注 0票数 3

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

代码语言:javascript
复制
[[[UIApplication sharedApplication] delegate] managedObjectContext]

代码语言:javascript
复制
[[[UIApplication sharedApplication] delegate] __managedObjectContext]

它不起作用。

但是这行代码运行得很好:

代码语言:javascript
复制
NSLog(@"Seeking for the AppDelegate : %@", [[[UIApplication sharedApplication] delegate] class]);

你有解决方案吗?尼尔斯

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-07-08 17:52:10

尝试将其转换为实际的应用程序委托实现,如

代码语言:javascript
复制
 [(MyAppDelegate *)[[UIApplication sharedApplication] delegate] managedObjectContext];

并添加

代码语言:javascript
复制
#import "MyAppDelegate.h"

在文件的顶部。

票数 7
EN

Stack Overflow用户

发布于 2011-07-08 19:57:44

使用这样的单例是不好的做法,甚至在Core Data文档中明确建议您这样做:

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

视图控制器通常不应该从全局对象(如应用程序委托)中检索上下文。这往往会使应用程序架构变得僵化。视图控制器通常也不应该为自己的使用创建上下文。这可能意味着使用控制器的上下文执行的操作不会注册到其他上下文,因此不同的视图控制器将对数据有不同的视角。

当您创建一个视图控制器时,您向它传递一个上下文。您可以传递现有上下文,或者(在希望新控制器管理离散编辑集的情况下)传递为其创建的新上下文。通常情况下,应用程序委托负责创建一个上下文,并将其传递给显示的第一个视图控制器。

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

票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6622699

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档