编辑:我的Base64解码有问题。我搜索了一个外部Base64解码器,它的工作原理如下:
情况就是这样:我有一个从Web服务获得的Base64编码字节数组并将其转换为NSData:
NSData *data = [Base64 decodeBase64WithString:response];
在我的Webview控制器中,我声明:
[webview loadData:fileData MIMEType:@"application/pdf" textEncodingName:@"utf-8" baseURL:nil];
fileData是解码数据。
当我运行这个时,我得到一个灰色的屏幕。所以我假设我没有给它一个正确的NSData
对象。
我在输入时已经回答了我自己的问题。
所以我假设我没有给它一个正确的
NSData
对象。
我的Base64解码错了。
使用此语句就像一个魅力:
[webview loadData:fileData MIMEType:@"application/pdf" textEncodingName:@"utf-8" baseURL:nil];
我只是发帖,所以其他人可以看看他们有同样的问题。
[webView loadata:data MIMEType:@"application/pdf" textEncodingName:@"UTF-8" baseURL:nil];
这应该为你做的伎俩,如果它没有你可以像V1ru8建议的那样将它写入文件,但在大多数情况下这是一个额外的步骤。
希望这会有所帮助
除了已经提供的答案之外,我发现在包含UIViewController的初始化函数中将NSData*
加载到UIWebView
中不起作用,并且不会出现错误。
NSData*
needs将加载到UIWebView
函数中的viewDidLoad
。
UIWebView是DEPRECATED,使用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];
最简单的方法:
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];