Цель C Загрузить PDF-файл в UIWebView - PullRequest
5 голосов
/ 31 октября 2011

EDIT: что-то не так с моим декодированием Base64.Я искал внешний декодер Base64, и он работал примерно так:

Это так: у меня есть байтовый массив в кодировке Base64, который я получаю из веб-службы и преобразую в NSData:

NSData *data = [Base64 decodeBase64WithString:response];

И в моем Webview Controller я объявил:

[webview loadData:fileData MIMEType:@"application/pdf" textEncodingName:@"utf-8" baseURL:nil];

fileData - это декодированные данные.

Когда я запускаю это, я получаю серый экран.Итак, я предполагаю, что я не даю ему правильный NSData объект.

Ответы [ 5 ]

12 голосов
/ 01 ноября 2011

Я уже ответил на свой вопрос, когда набирал его.

Так что я предполагаю, что не даю ему правильный NSData объект.

МойРасшифровка Base64 была неправильной.

Использование этого утверждения работает как талисман:

[webview loadData:fileData MIMEType:@"application/pdf" textEncodingName:@"utf-8" baseURL:nil];

Я просто публикую сообщение, чтобы другие люди могли посмотреть на него из-за той же проблемы.

2 голосов
/ 31 октября 2011
[webView loadata:data MIMEType:@"application/pdf" textEncodingName:@"UTF-8" baseURL:nil];

Это должно сработать, если вы этого не сделаете, вы можете записать его в файл, как предлагает V1ru8, но в большинстве случаев это дополнительный шаг.

Надеюсь, это поможет

1 голос
/ 09 апреля 2019

UIWebView устарел, используйте WKWebView https://developer.apple.com/documentation/webkit/wkwebview?language=objc

Objective-C Пример:

#import <WebKit/WebKit.h>

...

CGRect screen = [[UIScreen mainScreen] bounds];
CGFloat width = CGRectGetWidth(screen);
CGFloat height = CGRectGetHeight(screen);


WKWebView *wkwebView = [[WKWebView alloc] initWithFrame:CGRectMake(0, 0, width, height)];
//UIWebView *webView = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0, width, height)]; //DEPRECATED

NSURL *targetURL = [[NSBundle mainBundle] URLForResource:@"fileName" withExtension:@"pdf"];
NSURLRequest *request = [NSURLRequest requestWithURL:targetURL];
//[webView loadRequest:request]; //DEPRECATED
[wkwebView loadRequest:request];

//[self.view addSubview:webView]; //DEPRECATED
[self.view addSubview:wkwebView];
1 голос
/ 30 октября 2013

В дополнение к уже предоставленным ответам я обнаружил, что загрузка NSData* в UIWebView в функции инициализатора содержащего UIViewController не работает и не будет ошибки.

NSData* необходимо загрузить в UIWebView в функции viewDidLoad.

0 голосов
/ 02 сентября 2015

Самый простой способ сделать это:

UIWebView *webview = [[UIWebView alloc] init];
[self.view addSubview:webview];
NSString *path = [[NSBundle mainBundle] pathForResource:@"pdfFileName" ofType:@"pdf"];
NSURL *targetURL = [NSURL fileURLWithPath:path];
NSURLRequest *request = [NSURLRequest requestWithURL:targetURL];
[webview loadRequest:request];
...