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