saveToURL forSaveOperation completionHandler未执行

时间:2013-04-19 03:40:56

标签: objective-c core-data ios6.1

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

有谁知道这个问题会是什么?

2 个答案:

答案 0 :(得分:3)

我遇到了这个问题,这让我很伤心。尝试检查代码以构建网址。确保您获得了NSDocumentDirectory的路径,而不是NSDocumentationDirectory,就像在此post中发现的那样。

答案 1 :(得分:1)

SAVETOURL未执行的原因之一是在datamodel中:将attributes / relations设置为optional。对我来说,经过一周的压力后,它才起作用了!