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;
    }
}

これを実装するクラスは、UICollectionView のデータ ソースおよびデリゲートである UIViewController です。UIViewController をデータ ソースとしてアンフックすると、completedHandler が成功し、managedObjectContext が設定されます。

問題が何であるかを知っている人はいますか?

4

2 に答える 2

3

私はこの問題を抱えていて、それは私を殺していました。URL を構築するためのコードを確認してみてください。この投稿で発見されたように、NSDocumentationDirectory ではなく、NSDocumentDirectory へのパスを取得していることを確認してください。

于 2013-10-15T04:58:55.093 に答える