2

我正在尝试在 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。

有谁知道会是什么问题?

4

2 回答 2

3

我有这个问题,它正在杀死我。尝试检查您的代码以构建 url。确保您获得的是 NSDocumentDirectory 的路径,而不是 NSDocumentationDirectory,正如在这篇文章中发现的那样。

于 2013-10-15T04:58:55.093 回答
1

未执行 SAVETOURL 的原因之一是在数据模型中:将属性/关系设置为可选。对我来说,经过整整一周的压力,它起作用了!!

于 2014-02-25T11:20:42.857 回答