Обработчик завершения iOS 7 никогда не вызывается

В следующем коде ни один из обработчиков завершения никогда не выполняется. Единственное объяснение, которое мне удалось найти, этоОшибка в iPhone Simulator 5.1 с Xcode 4.5 с использованием UIManagedDocument , Это говорит о том, что это может быть ошибка в симуляторе iPhone 5.1. Однако я'Я пробовал симуляторы iPhone 6.0, 6.1 и 7.0, но ни один из них не работал. Я'буду очень признателен за вашу помощь.

(Кстати, ямы видели этот код в курсе Стэнфордского iOS, лекция 14)

NSURL *url = [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject];
url = [url URLByAppendingPathComponent:@"DataDocument"];
UIManagedDocument *document = [[UIManagedDocument alloc] initWithFileURL:url];

if(![[NSFileManager defaultManager] fileExistsAtPath:[url path]]){

        NSLog(@"This logs");

    [document saveToURL:url forSaveOperation:UIDocumentSaveForCreating completionHandler:^(BOOL success){

        NSLog(@"This never logs");

    }];

}else if(document.documentState == UIDocumentStateClosed){

        NSLog(@"This logs");
    [document openWithCompletionHandler:^(BOOL success){
        NSLog(@"This never logs");
    }];

}else{
    //I have a separate log for this, but it's never 'else'
}

РЕДАКТИРОВАТЬ: ЯМы нашли вопрос, который, кажется, имеет дело с точно такой же проблемой.Я могу'tsmanageobjectcontext Я просто прикрепил это к обработчику завершения, не выполняющемуся.

РЕДАКТИРОВАТЬ: я выяснил, в чем проблема: поскольку openWithCompletionHandler выполняется асинхронно, мое приложение будет пытаться использовать документ до его открытия. Использование цикла выполнения решило проблему. Пример ниже.

if(doc.documentState == UIDocumentStateClosed){

    NSLog(@"This logs");
    __block BOOL waitingOnCompletionHandler = YES;
    [doc openWithCompletionHandler:^(BOOL success){

        NSLog(@"This logs too!");

    }];

    while (waitingOnCompletionHandler) {
       NSDate *futureTime = [NSDate dateWithTimeIntervalSinceNow:0.1];
       [[NSRunLoop currentRunLoop] runUntilDate:futureTime];
    }

}

Ответы на вопрос(0)

Ваш ответ на вопрос