我正在尝试在UIManagedDocument上调用saveToURL forSaveOperation completionHandler方法,但是没有执行完成块。它在第一次尝试保存时失败,在(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。
有谁知道这个问题会是什么?
答案 0 :(得分:3)
我遇到了这个问题,这让我很伤心。尝试检查代码以构建网址。确保您获得了NSDocumentDirectory的路径,而不是NSDocumentationDirectory,就像在此post中发现的那样。
答案 1 :(得分:1)
SAVETOURL未执行的原因之一是在datamodel中:将attributes / relations设置为optional。对我来说,经过一周的压力后,它才起作用了!