Я пытаюсь вызвать метод 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.
Кто-нибудь знает, в чем проблема?
Мое первое предположение заключалось в том, что 'document' равен нулю, что объясняет, почему первый« @ »никогда не регистрируется« 'не будет печатать. Однако это не объясняет второй. 'UIDocumentStateClosed' равно 1, так что второе условие' if' не будет выполнено для документа nil. – paulmelnikow
CoreDataSingelton, документ и URL-адрес и не ноль. – davidkohn
Как вы называете этот метод? Вызывается ли он в основном потоке? Если вы добавите NSLog в конце useDocument, он * напечатан, правильно? – paulmelnikow