【问题标题】:Loading local html from an array in xcode从xcode中的数组加载本地html
【发布时间】:2014-02-27 03:22:49
【问题描述】:

我正在尝试将本地托管的 html 文件从数组加载到 webview 中。它看起来像这样

_siteAddresses = [[NSArray alloc]
                      initWithObjects:@"file://localhost/var/mobile/Application/${APP_ID}/First Pentecostal Seminary.app/First_Pentecostal_Seminary/Main.html",...

对应的代码是

NSString *urlString = [_siteAddresses
                       objectAtIndex:indexPath.row];
NSURL *url = [NSURL URLWithString:urlString];

NSURLRequest *request = [NSURLRequest requestWithURL:url];

self.detailViewController.webView.scalesPageToFit = YES;

[self.detailViewController.webView loadRequest:request];

我做错了什么......是我的编码还是html编码(我相信那里可能有一些java)

【问题讨论】:

  • @OmnicrinCS 解决了你的问题
  • 阅读 Rob 的回答中的 cmets,看看什么对我有用。

标签: html ios arrays nsstring nsarray


【解决方案1】:

两个想法:

  1. 该示例文件 URL 看起来不正确。你是如何构建的?如果它是您设备上捆绑包中的内容,我希望它更像:

    file:///var/mobile/Applications/9E670C3C-C8B1-4B09-AE66-B43F7DB29F4D/First Pentecostal Seminary.app/...
    

    显然,您必须通过使用NSBundle 实例方法URLForResource 或使用包的bundleURL 以编程方式确定此URL,然后添加适当的路径组件。

  2. 您应该 (a) 将视图控制器指定为您的 Web 视图的 delegate;然后 (b) 执行 webView:didFailLoadWithError: 并查看那里的错误,它会告诉你错误是什么,如果有的话。


例如,我的包中有一个文件 test.html,我可以像这样将其加载到 Web 视图中:

NSURL *bundleURL = [[NSBundle mainBundle] bundleURL];
NSURL *url = [bundleURL URLByAppendingPathComponent:@"test.html"];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
[self.webView loadRequest:request];

我已将我的视图控制器设置为 Web 视图的委托,并拥有以下 didFailLoadWithError

- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error
{
    NSLog(@"%s: %@", __FUNCTION__, error);
}

因此,当我这次尝试使用无效 URL 加载请求时(test2.html,我的包中没有),我收到以下错误:

2014-02-26 23:35:43.593 MyApp[3531:70b] -[ViewController webView:didFailLoadWithError:]:错误域=NSURLErrorDomain 代码=-1100“在此服务器上找不到请求的 URL。” UserInfo=0x8c32f40 {NSErrorFailingURLStringKey=file:///Users/user/Library/Application%20Support/iPhone%20Simulator/7.0.3/Applications/FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF/MyApp.app/test2.html, NSErrorFailingURLKey =file:///Users/user/Library/Application%20Support/iPhone%20Simulator/7.0.3/Applications/FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF/MyApp.app/test2.html, NSLocalizedDescription=请求的 URL 是在此服务器上未找到。, NSUnderlyingError=0x10424c90 "在此服务器上未找到请求的 URL。"}

【讨论】:

  • 只是为了澄清你是说 ${APP_ID} 是错误的还是使用 localhost
  • @OmnicronCS 就个人而言,我对两者都持怀疑态度。我作为示例提供的file:// URL 是我从URLForResource 获得的有效URL。通常,我只需在包中使用带有相对本地路径的字符串文字,然后使用我上面引用的那些 NSBundle 方法来确定运行时的完整 URL。
  • @OmnicronCS 顺便说一句,我还会手动检查捆绑包(例如,找到位于 Xcode 项目的 Products 文件夹中的捆绑包;选择“在 Finder 中显示”并在 Finder 中查看它,选择“显示包内容”)并确保 (a) 文件完全存在(因为将文件添加到项目中太容易了,并且不小心忽略了将它们包含在包中); (b) 文件在您认为的位置(因为 Xcode 中的文件夹并不总是转换为包中的子目录;这取决于项目是如何添加到项目中的)。
  • ...代码是类似问题的两个答案的汇编。我应该如何实现 webView:didFailLoadWithError:...我看到的唯一例子表明没有互联网连接
  • 奇怪的是,我无法从产品中选择“在 Finder 中显示”。我确实检查了我的构建阶段,发现这些文件被列为资源。
【解决方案2】:
Try this code   

UIWebView *documentsWebView=[[UIWebView alloc]init];
documentsWebView.delegate=self;
documentsWebView.frame=CGRectMake(0, 0, 1024, 616);  
documentsWebView.backgroundColor=[UIColor clearColor];  
[self.view addSubview:documentsWebView];    
NSString* htmlString = [NSString stringWithContentsOfFile:[_siteAddresses
                   objectAtIndex:indexPath.row] encoding:NSUTF8StringEncoding error:nil];  
[documentsWebView loadHTMLString:htmlString baseURL:nil];

【讨论】:

  • 我喜欢你的方法我唯一的问题是我从一个数组加载本地和互联网托管的网页。
  • 这对互联网托管页面也实用吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-12-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-31
相关资源
最近更新 更多