如何将文件放在我的bundle的资源目录中?

时间:2012-03-09 15:52:00

标签: xcode

我有一个.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'

1 个答案:

答案 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);

看看它给你带来了什么。

相关问题