2012-03-20 2 views
4

My UIDocumentsInteractionController работает до представления листа действий с помощью кнопки, которая говорит «iBooks», но когда я нажимаю на эту кнопку, она просто увольняется, и она не принимает меня интерактивные книги. Вот мой код:UIDocumentsInteractionController показывает iBooks, но не открывает его

NSString *filenamePath =[NSString stringWithFormat:@"temp.%@", [[file path] pathExtension]]; 

    NSString *docDir = [DataCenter getDocumentsDirectoryPath]; 

    NSString *fullPath = [docDir stringByAppendingPathComponent:filenamePath]; 

    NSURL *url = [NSURL fileURLWithPath:fullPath]; 
    UIDocumentInteractionController *c = [UIDocumentInteractionController interactionControllerWithURL:url]; 

    BOOL success = [c presentOpenInMenuFromBarButtonItem:buttonBack animated:YES]; 

Что я делаю неправильно? Thanks

ответ

17

Для тех, кто застрял в этом: вам не нужно настраивать себя как делегат UIDocumentInteractionController вообще.

проблема была [UIDocumentInteractionController interactionControllerWithURL:url] был автореализован. Он думал, что он будет сохранен внутри, пока не будет показан лист действий, но, видимо, это не так. Так что, давайте оставим его, пока лист действия не уйдет.

+5

Вау - хорошо, это действительно так, даже с ARC !! Вам нужно создать свойство с именем 'self.interactionController' (или аналогичным) и alloc-init, или оно будет выпущено. Спасибо @PragmaOnce! –

+0

Рад помочь :) – 0xSina

0

Пробуйте проверить методы UIDocumentInteractionControllerDelegatedocumentInteractionController:willBeginSendingToApplication: и documentInteractionController:didEndSendingToApplication:. Если ваш контроллер просмотра является делегатом контроллера взаимодействия с документом, это должно указывать на то, где проблема может быть.

Кроме того, вы должны подтвердить, что файл, который вы пытаетесь использовать в другом месте (как я полагаю PDF), на самом деле является тем, что вы ожидаете от него.

+0

Файл существует и является PDF (подтверждается, что путем загрузки папки документов через Xcode). Методы делегата не вызываются ... – 0xSina

+0

Вы добавили свой диспетчер представлений в качестве делегата? Просто вводить методы недостаточно. Вам нужно сделать 'c.delegate = self' – MishieMoo

+0

да ... Дело в том, что я не знаю, какие методы делегата реализовать. Те, о которых вы упомянули, просто возвращают void, поэтому не имеет значения, реализую их или нет (но я все равно). Другие, которые я нашел в документации, которая запросила BOOL в качестве возврата, были documentInteractionController: controller: canPerformAction: и documentInteractionController: controller: performAction: и я возвращаю YES из обоих из них .... – 0xSina

Смежные вопросы