managedObjectContext尚未为第一个ViewController做好准备

时间:2013-03-31 10:32:37

标签: ios core-data nsmanagedobjectcontext

我正在使用CoreData,虽然我在AppDelegate的“willFinishLaunchingWithOptions”中实例化我的managedObjectContext,但是当我的第一个ViewController加载时,它还没有准备好,我的应用程序崩溃了。

如果我将VC设置为root,但不使用managedObjectContext,然后转到使用它的VC,则可以正常工作。我真的不知道该怎么做,因为“willFinishLaunchingWithOptions”是我能得到的最早的。

这是初始化managedObjectContext

的代码
-(void)useDocument
{
    NSURL *url = [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject];
    url = [url URLByAppendingPathComponent:@"EtaxiDocument"];
    UIManagedDocument *document = [[UIManagedDocument alloc]initWithFileURL:url];
    self.document = document;

    if ( ! [[NSFileManager defaultManager] fileExistsAtPath:[url path]])
    {
        NSLog(@"doc no");
        // If the document does not exist, create it
        [document saveToURL:url
           forSaveOperation:UIDocumentSaveForCreating
          completionHandler:^(BOOL success) {
              if (success)
              {
                  self.managedObjectContext = document.managedObjectContext;
                  NSLog(@"Document created");
              }
          }
        ];

    } else if ( document.documentState == UIDocumentStateClosed ) {
        NSLog(@"doc yes");
        // If the document exists but is closed, open it
        [document openWithCompletionHandler:^(BOOL success) {
            if (success)
            {

                self.managedObjectContext = document.managedObjectContext;
                NSLog(@"Document opened");
            } else { NSLog(@"error op doc"); }
        }];
    } else {
        NSLog(@"doc open");
        // If the document is already open, try to use it
        self.managedObjectContext = document.managedObjectContext;
    }
}

0 个答案:

没有答案
相关问题