pathForResource返回nil,以及UIWebView本地加载html、css/js

PS:记录自己工作学习中的一些知识;

1、关于方法

- (nullable NSString *)pathForResource:(nullable NSString *)name ofType:(nullable NSString *)ext;返回nil 问题;

例如:

// 加载test.html
NSString * htmlPath = [[NSBundle mainBundle] pathForResource:@"test" ofType:@"html"];
// htmlPath返回nil
/*
排错方法:
NSLog(@"[NSBundle mainBundle] : \n%@ \n",[NSBundle mainBundle]);
查看 
/Users/admin/Library/Developer/CoreSimulator/Devices/051CFF8B-B7A4-49E0-B25C-8AE0536B0307/data/Containers/Bundle/Application/F2FEBC5F-0056-426E-86E3-CA542922A0FE/TestXX.app目录下是否存在test.html
如果不存在则在项目----> TARGECTS---->Build Phases---->Cpoy Bundle Resources中添加
*/

2、关于UIWebView 加载本地html、js、css

  • 引入HTML文件到项目中
pathForResource返回nil,以及UIWebView本地加载html、css/js_第1张图片
_UIWebView.png

Creat groups

1、Creat groups引入的文件夹为黄色的;
2、我们可以在项目中右键手动New Group 但是新添加的文件夹并不是真的存在于项目目录中,我们可以Show in Finder来查看项目文件结构,发现文件目录中并没有新建的文件夹.
但是从外部引进来的group并不会如此,它在项目目录汇中是存在真实目录的,这些文件是会被编译;
3、因此Create groups的方式添加到工程中,则不管加入项目的文件的目录结构如何,在APP中都可以通过mainBundlePath/filename这样结构来访问文件;

Creat folder reference

1、Creat folder reference在引入的文件夹为蓝色的;
2、只是单纯的创建了引用,文件夹内部的原有文件层次架构并不会改变,所以在使用的时候需要通过mainBundlePath/Path/filename这样的路径来访问文件.所以这种方式比较适合我们;
3、这样的好处还有一个就是,比如我们login.html中这样的相对路径,都可以不需要修改;

pathForResource返回nil,以及UIWebView本地加载html、css/js_第2张图片
_UIWebView02.png

所以就像这样的目录结构可以这样写:

NSString *mainBundlePath = [[NSBundle mainBundle] bundlePath];
NSString *basePath = [NSString stringWithFormat:@"%@/phone",mainBundlePath];
NSURL *baseUrl = [NSURL fileURLWithPath:basePath isDirectory:YES];
NSString *htmlPath = [NSString stringWithFormat:@"%@/login.html",basePath];
NSString *htmlString = [NSString stringWithContentsOfFile:htmlPath encoding:NSUTF8StringEncoding error:nil];
[self.webView loadHTMLString:htmlString baseURL:baseUrl];

你可能感兴趣的:(pathForResource返回nil,以及UIWebView本地加载html、css/js)