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