2013-04-19 6 views
2

Я пытаюсь вызвать метод saveToURL forSaveOperation completeHandler в UIManagedDocument, однако блок завершения не выполняется. Он не работает в (1) при первой попытке сохранить и не удается выполнить (2) при попытках после этого. Я не уверен, что это означает, что он записывается на диск в первый раз или нет. Однако NSLogs в файле завершенияHandler никогда не регистрируются вообще.saveToURL forSaveOperation completeHandler не выполняется

- (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 в качестве источника данных, завершение функции Handler выполняется успешно, и установлен параметр managedObjectContext.

Кто-нибудь знает, в чем проблема?

+0

Мое первое предположение заключалось в том, что 'document' равен нулю, что объясняет, почему первый« @ »никогда не регистрируется« 'не будет печатать. Однако это не объясняет второй. 'UIDocumentStateClosed' равно 1, так что второе условие' if' не будет выполнено для документа nil. – paulmelnikow

+0

CoreDataSingelton, документ и URL-адрес и не ноль. – davidkohn

+0

Как вы называете этот метод? Вызывается ли он в основном потоке? Если вы добавите NSLog в конце useDocument, он * напечатан, правильно? – paulmelnikow

ответ

3

У меня была эта проблема, и она меня убивала. Попробуйте проверить свой код для создания URL-адреса. Убедитесь, что вы получаете путь к NSDocumentDirectory, а не NSDocumentationDirectory, как было обнаружено в этом post.

+0

Ты спас мою задницу! My saveToURL: forSaveOperation: completeHandler: не работает (статус был NO). Когда я изменил свой путь к NSDocumentDirectory, он сработал. Я совершил ошибку автозавершения. –

1

Одна из причин, по которым SAVETOURL не выполняется, находится в datamodel: установите атрибуты/отношения в факультативный. Для меня это работало после целой недели стресса !!

Смежные вопросы