Iphone 如何从模式视图中使用托管数据上下文?(核心数据)

Iphone 如何从模式视图中使用托管数据上下文?(核心数据),iphone,core-data,modalviewcontroller,Iphone,Core Data,Modalviewcontroller,我已经建立了一个核心数据结构。在我的申请委托中,我有: - (void)applicationDidFinishLaunching:(UIApplication *)application { // Configure and show the window. RootViewController *rootViewController = [[RootViewController alloc] initWithStyle:UITableViewStylePl

我已经建立了一个核心数据结构。在我的申请委托中,我有:

    - (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。

我遇到了这个问题,想到了两种解决方案

  • 将数据传递到字典中的根视图控制器(通过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
    

    轰,模态视图中有一个主运行中心。根据需要调用save。请注意,如果您忘记传递MOC,则当您尝试执行获取请求时,您的应用程序将崩溃

    好主意,谢谢!!除此之外,如何将其传递给模态视图控制器?是否有一个“[自我呈现的Modalviewcontroller:mvc动画:是的](当你在做的时候,把这个MOC传过来);”方法?编辑:代码格式化失败,对不起,我不知道如何…不,没有这样的方法。您可以在创建它之后将其传入,也可以覆盖
    presentModalViewController:animated:
    ,并在显示视图控制器之前将其添加进去。但是,我建议使用更简单的第一种方法。在展示视图控制器之前先把它传过来。Ps:在第一个“之后,你有一个额外的空间。哦,是的,我想我确实知道怎么做了,我只是感到困惑。非常感谢,我想它成功了!!不客气。:-)(别忘了做一个好公民,记下正确的答案。;-)