0

Я загружаю PDF-файл с онлайн-сервера и сохраняю его в своей песочнице приложения, а затем просматриваю его в iBooks.Цель C: Открытие файла PDF на iBooks

Обзор iBooks - вот что я сейчас борюсь. Я попробовал этот код:

UIDocumentInteractionController *docController = [UIDocumentInteractionController interactionControllerWithURL:url]; 

    docController.delegate = self; 

    [docController presentOpenInMenuFromRect:savePDF.frame inView:self.view animated:YES]; 
    [docController dismissMenuAnimated:YES]; 

Еще не GOR никаких шансов, он работает, но поповер будет увольняют сразу после того, как он был представлен. Но когда я удалил [docController dismissMenuAnimated:YES];, это приводит к ошибке: '-[UIPopoverController dealloc] reached while popover is still visible.'

В чем может быть проблема?

+2

Вы должны висеть на ссылке docController в переменной экземпляра до тех пор, пока оно не будет показано. – borrrden

+0

@borrrden Как я могу это сделать? –

ответ

0

Проблема заключается в том, что ваш UIDocumentInteractionController освобождается сразу после его представления, поскольку переменная docController больше не входит в сферу действия.

Чтобы предотвратить это, вы должны создать свойство strong или переменную экземпляра и сохранить там UIDocumentInteractionController. Таким образом, то UIDocumentInteractionController будет придерживаться вокруг, пока вы не отпустите объект контролирующий его, который должен быть достаточно длинным для пользователя, чтобы сделать выбор ...

+0

Спасибо! Теперь работает! –

+2

Технически, в iOS нет сборки мусора (ARC - это функция компилятора, а за кулисами она будет использовать подсчет ссылок) – borrrden

+0

@borrrden Вы правы, я не стал исследовать это ... Спасибо за исправление ! –

0

я снова и снова попробовал все, но, наконец, получил [UIPopoverController dealloc] наступает тогда, когда поповер еще видна ошибки, чтобы уйти, и все работает, как это сделать:

Перейти к вашему проекту построить Phases -> затем Источники Compile -> выбрать в .m, что у вас возникли с помощью двойного щелчка на значке компилятора и добавьте -fobjc-arc, затем очистите и создайте приложение.

Снова это не будет работать для всех и, возможно, не будет правильным ответом, но это может также помочь нескольким другим, имеющим ту же проблему, что и я.