我正在使用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;
}
}