UIDocument openWithCompletionHandler не завершается на устройстве iOS

Я пытаюсь открыть управляемый документ с помощью openWithCompletionHandler:

Проблема, с которой я сталкиваюсь, заключается в том, что она отлично работает на симуляторе, но когда я тестирую ее на своем iPhone 4, обработчик завершения никогда не заканчивается. Код выглядит следующим образом:

[theManagedDocument openWithCompletionHandler:^(BOOL success){
    if(success) [self documentIsReady];
    if(!success) NSLog(@"Couldn't Open Document");
}];

Это отлично работает на симуляторе, и я получаю вызов documentIsReady (или "Не могу открыть документ", если это ошибки). Но на iPhone 4 он никогда не запускает блок CompletionHandler. Я поставил точки останова через блок (до и после обоих операторов if), и ничего не вызвано. Нет "Не удалось открыть документ" на консоли, нет вызова documentIsReady.

Я должен также упомянуть, что, похоже, в первый раз, когда я запускаю приложение на iPhone, он будет работать правильно. У меня также есть инкапсулированный в оператор if с вызовом fileExistsAtPath:. Он получает внутри оператора if только штраф и вызывает openWithCompletionHandler:, но блок завершения просто не запускается.

Я использую iOS 5.1 и Xcode 4.3.2.

Ответ 1

В моем случае, отключив мой iPad и перезапустив его, "исправлена" эта проблема. Удачи!

Ответ 2

Я столкнулся с той же проблемой в своих приложениях, которые используют iCloud для обмена данными. Я понял, что openWithCompletionHandler: просто ждет и никогда не вызывает обработчик завершения, если документ остается открытым приостановленным приложением. Если это так, вы должны убедиться, что вы закрываете документ, когда ваше приложение переходит в фоновый режим.

Ответ 3

Попробуйте проверить, что theManagedDocument!= nil перед вызовом - это единственная причина, по которой я могу думать о том, почему блок не будет выполнен.

Ответ 4

Другой причиной того, почему success может быть false, является то, что вы изменили свою модель (добавив свойство к сущности, например), но не удалили приложение из симулятора/устройства, чтобы получить обновление модели.