我有一个.html文件需要进入我的iPhone应用程序的bundle资源目录。我试过FIle - >新 - >资源但似乎没有任何东西符合要求。
现在我正在使用UIWebView loadRequest并使用“pathForResource:@”help.htm“......当它无法找到help.htm时它会崩溃。如果我把它放在Resource directoyr中,我相信我仍然可以在没有任何目录限定符的情况下使用相同的代码。
我该怎么做?
更新:
这是UIWebView代码:
- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if([[segue identifier] isEqualToString:@"helpSegue"]) {
[slWebView loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"iHelp.htm" ofType:@"html"]isDirectory:NO]]];
}
else
if ([[segue identifier] isEqualToString:@"reportSegue"]) {
NSLog(@"reportSegue");
}
}
这是我得到的错误:
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[NSURL initFileURLWithPath:isDirectory:]: nil string parameter'
答案 0 :(得分:0)
我认为这是你的问题:
[slWebView loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"iHelp.htm" ofType:@"html"]isDirectory:NO]]];
您需要从文件名中省略扩展名,因为它是在单独的参数中指定的:
[slWebView loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"iHelp" ofType:@"htm"]isDirectory:NO]]];
然后只需将“iHelp.htm”文件正常添加到项目中,确保将其标记为包含应用程序目标。
为确保这一点,请尝试在“产品”组中右键单击您的应用,然后选择“在Finder中显示”。然后右键单击.app包(它只是一个文件夹)并选择显示内容以查看实际包含的内容。如果您没有看到“iHelp.htm”文件,则表示它未标记为目标成员。在Xcode中查找并选择“iHelp.htm”文件,然后打开实用程序视图。查看“目标成员资格”部分,确保选中应用程序目标的复选框。
<强>更新强> 您对上述变化的看法是:
[[NSBundle mainBundle] pathForResource:@"iHelp" ofType:@"htm"]
在应用程序包中搜索“iHelp.htm”,它返回htm文件的路径,在该文件返回之前nil,因为它无法找到它。 (在您查找不存在的“iHelp.htm.html”之前。问题的下一部分是弄清楚为什么这条路径没有正确转换为URLRequest。你有很多内联,我个人喜欢,但要正确调试,您可能希望暂时将其分解为单独的变量。
NSString *iHelpPath = [[NSBundle mainBundle] pathForResource:@"iHelp" ofType:@"htm"];
NSLog(@"iHelpPath = %@", iHelpPath);
NSURL *fileURL = [NSURL fileURLWithPath:iHelpPath];
NSLog(@"fileURL = %@", fileURL);
NSURLRequest *request = [NSURLRequest requestWithURL:fileURL];
NSLog(@"request = %@", request);
看看它给你带来了什么。