0

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

如果我将一个不使用 managedObjectContext 的 VC 设置为 root,然后转到使用它的 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;
    }
}
4

0 回答 0