我(有点)遵循斯坦福CS193P ios类,我正在尝试获取文档上下文,而不必从控制器传递到控制器。 Haggerty教授使用这种方法来获取他的背景,但它对我不起作用。我正在拼写所有内容,当我通过它时我可以得到上下文,但不是当我这样做时 我错过了什么?我只想获得我知道我创建的数据库的上下文,而不必传入。
- (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;
}
}
答案 0 :(得分:0)
我认为你没有拼错任何东西,但你可能对该方法的作用有错误的期望。该方法不返回任何上下文。它将上下文设置为类属性(但仅在某些情况下!)。 因此,在调用此方法之后,您应该能够访问self.managedObjectContext属性。
然而..方法实现不是很干净,因此有点危险。它将仅为成功的方案设置'managedObjectContext'属性。在其他情况下,该方法不会清除self.managedObjectContext属性,因此在这些情况下,不清楚self.managedObjectContext指向的是什么。 由于该方法不提供任何成功状态,因此如果已正确设置managedObjectContext,则永远不会信任。
答案 1 :(得分:0)
我遇到了同样的问题(也在做斯坦福大学的课程)。我已经找到了解决方案,你可以在iOS 7 Completion handler never gets called
找到它OpenWithCompletionHandler是异步的,因此即使在完成处理程序块完成执行之前,应用程序也可能尝试使用上下文。因此,似乎该方法不起作用。使用运行循环将解决您的问题。