我设置了核心数据结构。在我的申请代表中,我有:
- (void)applicationDidFinishLaunching:(UIApplication *)application
{
// Configure and show the window.
RootViewController *rootViewController = [[RootViewController alloc] initWithStyle:UITableViewStylePlain];
NSManagedObjectContext *context = [self managedObjectContext];
if (!context) {
// Handle the error.
}
rootViewController.managedObjectContext = context;
UINavigationController *aNavigationController = [[UINavigationController alloc] initWithRootViewController:rootViewController];
self.navigationController = aNavigationController;
[_window addSubview:[_navigationController view]];
[_window makeKeyAndVisible];
[rootViewController release];
}
Tl; dr :此代码设置指向我的数据的托管对象上下文的指针,然后将根视图控制器的managedObjectContext设置为其managedObjectContext。
然后,我拉出一个模态视图,让用户添加数据。但是为了保存这些数据,我需要访问managedObjectContext上下文,因为这是保存数据的方法......
foo *myFoo = (foo *)[NSEntityDescription insertNewObjectForEntityForName:@"Foo" inManagedObjectContext:managedObjectContext];
...但是如果没有访问托管对象上下文,我就无法调用它。 如何从模态视图访问rootViewController的managedObjectContext。
答案 0 :(得分:3)
我遇到了这个问题,想到了两个解决方案。
将数据传递到字典中的根视图控制器(通过NSNotificationCenter)并保存。
将ManagedObjectContext(MOC)传递给模态视图控制器,让模态视图的MOC进行保存。
由于某些原因,我最终选择#2。
要实现这一点,在您的UIViewController子类中,只需添加如下属性:
//... In your interface:
NSManagedObjectContext *moc;
//... beneath your interface:
@property (nonatomic, retain) NSManagedObjectContext *moc;
然后不要忘记根据需要合成和释放。接下来,在根视图中,在呈现mod视图之前传递上下文:
//... Create Modal VC, then...
[modalViewController setMOC:self.managedObjectContext];
// Now, present the modal VC
Boom,你的模态视图中有一个MOC。根据需要调用保存。请注意,如果您忘记传入MOC,则当您尝试执行获取请求时,您的应用程序将崩溃。