2014-10-13 4 views
0

Я пытаюсь открыть файл PDF, который я сохранил локально в своем приложении в iBooks. Приложение в настоящее время имеет список «литература» в представлении таблицы, и когда каждая ячейка прослушивается, приложение переходит к webView, который отображает PDF-файл (отлично работает). Я сделал BarButton в правом верхнем углу на navBar, чтобы пользователь мог открыть PDF в iBooks (чтобы они могли хранить его на своем устройстве).Открыть локальный файл 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"); 
} 

ответ

3

Fixed его! Взял некоторое время вдали от проекта, и, вернувшись через две недели, я понял это в < 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"); 

} 
1

КСН 8 Раскладка файловой системы изменены и не обмена файлами непосредственно из основной пакет больше не работает. Скопируйте файл в каталог документов и поделитесь им оттуда.

Вот как создать путь к файлу:

NSString *documentsDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject]; 
NSString *fileName = [NSString stringWithFormat:@"%@.pdf",litFileName]; 
NSString *filePath = [documentsDirectory stringByAppendingPathComponent:fileName]; 
NSURL *url = [NSURL fileURLWithPath:filePath]; 
+0

Не уверен точно, как это сделать ... Я пробовал: NSArray * тропинки = NSSearchPathForDirectoriesInDomains (NSDocumentDirectory, NSUserDomainMask, YES); NSString * documentsDirectory = [paths objectAtIndex: 0]; NSString * filePath = [documentsDirectory stringByAppendingString: [NSString stringWithFormat: @ "% @. Pdf", litFileName]]; NSURL * url = [NSURL fileURLWithPath: filePath]; SAME ERROR – RyanZ

+0

Вы неправильно добавляете файл в путь, вы должны использовать 'stringByAppendingPathComponent:' не просто добавить строку – rckoenes

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