首先,您需要创建一个属性,AppDelegate.h
如下所示:
@property (nonatomic, retain, readonly) NSManagedObjectContext *managedObjectContext; // or strong if you ARC instead of retain
使用readonly
防止您在外部修改上下文。
在AppDelegate.m
合成它像:
@synthesize managedObjectContext;
始终在AppDelegate.m
覆盖 getter 方法之内
- (NSManagedObjectContext *)managedObjectContext
{
if (managedObjectContext != nil) return managedObjectContext;
NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator];
if (coordinator != nil) {
managedObjectContext = [[NSManagedObjectContext alloc] init];
[managedObjectContext setPersistentStoreCoordinator:coordinator];
}
return managedObjectContext;
}
完成后,您将拥有一个managedObjectContext
可以在任何地方访问的属性
AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
NSManagedObjectContext* context = appDelegate.managedObjectContext;
一种更酷的方法可能是在您的类中创建一个类方法,AppDelegate.h
如下所示:
+ (AppDelegate *)sharedAppDelegate;
然后AppDelegate.m
执行以下操作:
+ (AppDelegate *)sharedAppDelegate
{
return (AppDelegate *)[[UIApplication sharedApplication] delegate];
}
现在,在导入AppDelegate
标题 ( #import "AppDelegate.h"
) 之前,您可以在任何地方执行以下操作:
AppDelegate* appDelegate = [AppDelegate sharedAppDelegate];
NSManagedObjectContext* context = appDelegate.managedObjectContext;
笔记
使用这种方法会导致您的应用程序变得僵化。为了克服这个问题,我建议您阅读Marcus Zarra的有关在 iPhone 上传递 nsmanagedobjectcontext 的文章。
希望能帮助到你。