AAChartKit 9.0以下版本UI界面不显示问题
最近公司在用AAChartKit做图表,使用的时候发现在iOS9.0以下的版本界面不能显示,并报以下错误:
Could not create a sandbox extension for '/'
查询资料之后,发现原因是iOS 9.0以下版本, WKWebview不支持load项目根目录下的HTML源文件,需要将需要加载的HTML及其引用到的JavaScript文件copy到沙盒目录下,并加载沙盒目录下的文件。
其实AAChartKit作者在GitHub项目主页结尾处推荐大家引用网络上的JavaScript文件,因为JavaScript文件比较大。但是使用网络文件会有一定的网络延迟,所以还是希望作者能够完善一下,加油!
当然如果使用了网络文件就不需要修改getJavaScriptFileURLRequest方法了,所以使用网络文件的朋友请绕行!
我的做法是:修改AAChartView.m文件getJavaScriptFileURLRequest方法,增加iOS系统版本检测,iOS9.0以下版本copyHTML及JavaScript文件到沙盒目录
具体代码如下:
- (NSURLRequest *)getJavaScriptFileURLRequest {
NSURL *webURL = [[NSBundle mainBundle] URLForResource:@"AAChartView" withExtension:@"html"];
//将文件copy到tmp目录
if ([[UIDevice currentDevice].systemVersion floatValue] < 9.0) {
NSError *error = nil;
NSFileManager *fileManager= [NSFileManager defaultManager];
NSURL *temDirURL = [[NSURL fileURLWithPath:NSTemporaryDirectory()] URLByAppendingPathComponent:@"www"];
[fileManager createDirectoryAtURL:temDirURL withIntermediateDirectories:YES attributes:nil error:&error];
NSArray *array = @[webURL.path.lastPathComponent, @"AADrilldown.js", @"AAEasingMin.js", @"AAFunnel.js", @"AAHighcharts-3d.js", @"AAHighchartsLibrary.js", @"AAHighchartsMore.js", @"AAJQueryLibrary.js"];
for (NSString *file in array) {
NSString *extension = [file pathExtension];
NSString *name = [file stringByDeletingPathExtension];
NSURL *url = [[NSBundle mainBundle] URLForResource:name withExtension:extension];
NSURL *newUrl = [temDirURL URLByAppendingPathComponent:file];
if ([array indexOfObject:file] == 0) {
webURL = newUrl;
}
if (![fileManager fileExistsAtPath:newUrl.path]) {
[fileManager copyItemAtURL:url toURL:newUrl error:&error];
}
}
}
NSURLRequest *URLRequest = [[NSURLRequest alloc] initWithURL:webURL];
return URLRequest;
}