Открыть локальный файл PDF в iBooks
Я пытаюсь открыть файл PDF, который хранится локально в моем приложении в iBooks. В настоящее время у приложения есть список "литературы" в табличном представлении, и при нажатии каждой ячейки приложение переходит к веб-представлению, которое отображает файл PDF (прекрасно работает). Я сделал BarButton в правом верхнем углу в navBar, чтобы позволить пользователю открывать PDF в iBooks (чтобы они могли хранить его на своем устройстве).
Пока кнопка откроет UIDocumentInteractionController
в нем отображаются все приложения на устройстве, которые могут открыть файл (после проверки, установлен ли iBooks). Затем, когда я нажимаю значок iBooks, приложение вылетает. Я смог изменить код так, чтобы iBooks открывался без сбоев, но PDF-файл не передавался, так что это бессмысленно (приведенный ниже код возвращается к тому, когда он падает).
Код ниже находится внутри IBAction barButton...
NSString *path = [[NSBundle mainBundle] pathForResource:litFileName ofType:@"pdf"];
NSURL *targetURL = [NSURL fileURLWithPath:path];
UIDocumentInteractionController *docController = [UIDocumentInteractionController interactionControllerWithURL:targetURL];
if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"itms-bookss:"]])
{
[docController presentOpenInMenuFromRect:CGRectZero inView:self.view animated:YES];
NSLog(@"ibooks is installed");
}
else
{
NSLog(@"no ibooks installed");
}
2 ответа
Починил это! Отнял некоторое время у проекта, и после того, как вернулся через две недели, я понял это менее чем через 15 минут.
Так что это была проблема с памятью для docController, и, объявив в файле.h и используя (сохранить), он работает отлично. Я также смог использовать метод [NSBundle mainBundle].
.h
@property (retain)UIDocumentInteractionController *docController;
.m
@synthesize docController;
//in bar button IBAction
NSString *path = [[NSBundle mainBundle] pathForResource:litFileName ofType:@"pdf"];
NSURL *targetURL = [NSURL fileURLWithPath:path];
docController = [UIDocumentInteractionController interactionControllerWithURL:targetURL];
if([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"itms-books:"]]) {
[docController presentOpenInMenuFromRect:CGRectZero inView:self.view animated:YES];
NSLog(@"iBooks installed");
} else {
NSLog(@"iBooks not installed");
}
На iOS 8 изменилась структура файловой системы, и обмен файлами напрямую из основного пакета больше не работает. Скопируйте файл в каталог документов и поделитесь им оттуда.
Вот как создать путь к файлу:
NSString *documentsDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject];
NSString *fileName = [NSString stringWithFormat:@"%@.pdf",litFileName];
NSString *filePath = [documentsDirectory stringByAppendingPathComponent:fileName];
NSURL *url = [NSURL fileURLWithPath:filePath];