Обработчик завершения 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'
}

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

РЕДАКТИРОВАТЬ: я узнал, в чем проблема: поскольку 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];
    }

}

person user2634633    schedule 23.11.2013    source источник
comment
Пробовали на реальном устройстве?   -  person Undo    schedule 24.11.2013
comment
У меня нет настоящего устройства :/   -  person user2634633    schedule 24.11.2013
comment
Какую отладку вы делали, чтобы проверить, как называется код?   -  person Wain    schedule 24.11.2013
comment
Ваш код в порядке. Я скопировал/вставил ваш код в Xcode, и он отлично работает с симуляторами 5.0, 6 и 7. Я использую Xcode 5.0.1.   -  person samir    schedule 24.11.2013
comment
Хорошая ставка: document равно нулю, запишите, равно оно или нет.   -  person zaph    schedule 24.11.2013
comment
Документ существует? NSLog путь и проверить его.   -  person zaph    schedule 24.11.2013
comment
Я только что проверил, документ существует.   -  person user2634633    schedule 24.11.2013
comment
Уэйн, я использовал логи и точки останова   -  person user2634633    schedule 24.11.2013