在我将一些html硬编码到我的UIWebView函数后,我得到了“hello world”文本,但现在我正在尝试将该HTML移动到文件系统上其他位置的文件中,并且它不会呈现。
这就是我所拥有的:
- (void)viewDidAppear:(BOOL)animated
{
NSString *htmlFile = [[NSBundle mainBundle] pathForResource:@"learn" ofType:@"html" inDirectory:@"src/html_files"];
NSString* htmlString = [NSString stringWithContentsOfFile:htmlFile encoding:NSUTF8StringEncoding error:nil];
[theWebView loadHTMLString:htmlString baseURL:nil];
}
我的HTML文件位于我创建的名为src / html_files的目录中,该文件名为learn.html
我错误地认为HTML没有在屏幕上呈现?
谢谢!
答案 0 :(得分:1)
好的,所以群组只是Xcode中的一个构造,用于保持应用资源的有序性。虽然Xcode使用小文件夹图标,但并不一定意味着它们实际上是(Mac或iOS)文件系统上的单独文件夹。
但是,听起来您已将该文件添加为捆绑资源。这就是你发布的代码也是如此,但我不得不问,确定。
最有可能的是,唯一不对的是:
NSString *htmlFile = [[NSBundle mainBundle] pathForResource:@"learn"
ofType:@"html"
inDirectory:@"src/html_files"];
应该是这样的:
NSString *htmlFile = [[NSBundle mainBundle] pathForResource:@"learn"
ofType:@"html"];
来自the Apple documentation for NSBundle,
+ (NSString *)pathForResource:(NSString *)name
ofType:(NSString *)extension
inDirectory:(NSString *)bundlePath
bundlePath
顶级捆绑目录的路径。这必须是有效的路径。例如,到 指定Mac应用程序的软件包目录,您可以指定路径/Applications/MyApp.app。
bundlePath
参数并不是指定捆绑资源的相对路径。没有pathForResource:ofType:
参数的bundlePath
版本几乎总是您将使用的版本。安装完应用后,它会在任何位置找到 learn.html 文件,并返回完整路径。你真的不必担心它是如何嵌套的。它只是一个捆绑资源。
试一试。正如我在评论中所建议的那样,我总是建议利用error
参数进行调试:
NSError* error;
NSString* htmlString = [NSString stringWithContentsOfFile:htmlFile encoding:NSUTF8StringEncoding error: &error];
if (error != nil) {
NSLog(@"Error with stringWithContentsOfFile: %@", [error localizedDescription]);
}