UIDocument, связанный с EXC_BAD_ACCESS

В самом начале своего приложения я пытаюсь загрузить каждый UIDocument, чтобы получить небольшой предварительный просмотр их содержимого. В большинстве случаев это работает очень хорошо, но иногда я получаю сбой сразу после загрузки UIDocument. Моя проблема в том, что я понятия не имею, как интерпретировать сбой. Я даже не знаю наверняка, связано ли это с обработкой UIDocument (потоки 6 и 7 были связаны с UIDoc, но кажется, что поток 8 вызвал сбой).

Если кто-то может помочь мне интерпретировать это, я был бы очень благодарен:

введите здесь описание изображения

У меня есть точки останова для всех исключений, но отладчик не останавливается на определенной строке кода.


person n.evermind    schedule 06.08.2012    source источник
comment
что за ошибка в консоли, и можете ли вы убедиться, что вы успешно открыли свой UIDocument? (многие операции асинхронны)   -  person danqing    schedule 06.08.2012
comment
@iBlue в консоли вообще нет вывода. UIDoc не был успешно открыт, т. е. все, что у меня есть в блоке успеха openWithCompletionHandler: ^ (успех BOOL), не выполняется. Вылетает раньше. Итак, я предполагаю, что скриншот сбоя, который я предоставил, на самом деле мало что говорит об источнике ошибки, не так ли?   -  person n.evermind    schedule 06.08.2012
comment
@n.evermind, у меня тоже похожая проблема... не могли бы вы показать нам, как вы ее исправили? Это было бы очень полезно для меня.   -  person Ananth    schedule 22.01.2013


Ответы (1)


У меня такая же проблема. Это было легко воспроизвести только на одном из наших тестовых устройств, читая документ iCloud. Переустановка приложения не повлияла на ошибку.

Я использовал NSMetadataQuery для получения URL-адресов файлов. Мой приемник для NSMetadataQueryDidFinishGatheringNotification выглядел так:

- (void)queryDidFinishGathering:(NSNotification *)notification
{
    NSMetadataQuery *query = [notification object];
    [query disableUpdates];
    [query stopQuery]; //  <--- This was the problem

    NSMetadataItem *item = [query resultAtIndex:0];
    NSURL *url = [item valueForAttribute:NSMetadataItemURLKey];
    UIDocument *doc = [[CustomDocument alloc] initWithFileURL:url];
    [doc openWithCompletionHandler:^(BOOL success) {
         // EXC_BAD_ACCESS before completion block is called :'(
    }];

    [query enableUpdates];
}

Удаление вызова stopQuery все исправило!

person Neal Ehardt    schedule 06.05.2013