我正在尝试在 UIManagedDocument 上调用方法 saveToURL forSaveOperation completionHandler 但是完成块没有执行。它在第一次尝试保存时在 (1) 处失败,在之后的尝试中在 (2) 处失败。我不确定这是否意味着它是第一次写入磁盘。但是,completionHandler 中的 NSLogs 根本不会被记录。
- (void)useDocument
{
CoreDataSingleton *cds = [CoreDataSingleton getInstance];
UIManagedDocument *document = cds.document;
NSURL *url = document.fileURL;
if (![[NSFileManager defaultManager] fileExistsAtPath:[url path]]) {
NSLog(@"This is logged");
[document saveToURL:url forSaveOperation:UIDocumentSaveForCreating completionHandler:^(BOOL success) {
NSLog(@"This is never logged");
if (success) {
self.managedObjectContext = document.managedObjectContext;
}
}];
// (1) Fails here on the first go
} else if (document.documentState == UIDocumentStateClosed) {
NSLog(@"This is logged");
[document openWithCompletionHandler:^(BOOL success) {
NSLog(@"This is never logged");
if (success) {
self.managedObjectContext = document.managedObjectContext;
}
}];
// (2) Fails here on the second go
} else {
self.managedObjectContext = document.managedObjectContext;
}
}
实现这一点的类是 UIViewController,它是 UICollectionView 的数据源和委托。当我将 UIViewController 作为数据源取消挂钩时,completionHandler 成功并设置了 managedObjectContext。
有谁知道会是什么问题?