我无法获得nsmanageobjectcontext

我(有点)跟随斯坦福CS193P ios类,我试图得到一个文件上下文,而不必从控制器传递到控制器。 哈格蒂教授使用这种方法来获得他的背景,但这对我并不适用。 我正确地拼写一切,当我通过它,我可以得到的上下文,但不是当我这样得到它。
我错过了什么? 我只是想知道我创build的数据库的上下文,而不必传入

- (void)useDemoDocument { NSURL *url = [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject]; url = [url URLByAppendingPathComponent:@"Demo Document"]; UIManagedDocument *document = [[UIManagedDocument alloc] initWithFileURL:url]; if (![[NSFileManager defaultManager] fileExistsAtPath:[url path]]) { [document saveToURL:url forSaveOperation:UIDocumentSaveForCreating completionHandler:^(BOOL success) { if (success) { self.managedObjectContext = document.managedObjectContext; [self refresh]; } }]; } else if (document.documentState == UIDocumentStateClosed) { [document openWithCompletionHandler:^(BOOL success) { if (success) { self.managedObjectContext = document.managedObjectContext; } }]; } else { self.managedObjectContext = document.managedObjectContext; } } 

我不认为你拼错了任何东西,但是你可能对这个方法做了什么错误的期望。 该方法不返回任何上下文。 它将上下文设置为类属性(但在某些情况下!)。 所以在调用这个方法之后,你应该可以访问self.managedObjectContext属性。

但是..方法的实现不是很干净,因此有点危险。 它将只为成功的场景设置“managedObjectContext”属性。 在其他情况下,该方法不会清除self.managedObjectContext属性,因此在这些情况下,不清楚self.managedObjectContext指向什么。 由于该方法不提供任何成功的状态,你永远不能相信,如果managedObjectContext已经正确设置。

我也有同样的问题(也在做斯坦福class)。 我已经find了解决scheme,你可以在这里find它的iOS 7完成处理程序永远不会被调用

OpenWithCompletionHandler是asynchronous的,所以即使在完成处理程序块完成执行之前,应用程序也可能尝试使用上下文。 因此,这种方法似乎不起作用。 使用运行循环将解决您的问题。