我的调整中出现了崩溃,我相信它正在这个功能的某个地方发生:
@implementation UIImage (RenderBatteryImage)
+ (UIImage *) renderBatteryImageForJS:(NSString *)javascript height:(CGFloat)height percentage:(int)percentage charging:(int)charging color:(UIColor *)color colorBg:(int)colorBg {
int low = percentageIsLow(percentage);
CGFloat r, g, b;
[color getRed:&r green:&g blue:&b alpha:nil];
__block UIImage *image;
if([WKWebView class]) {
NSLog(@"LITHIUM: Using WKWebView");
WKWebView *newWebView = [[WKWebView alloc] initWithFrame:CGRectZero configuration:[[WKWebViewConfiguration alloc] init]];
[newWebView loadHTMLString:nil baseURL:nil];
[newWebView evaluateJavaScript:[NSString stringWithFormat:@"(function%@)(%0.0f,%i,!!%i,!%i,[%0.0f,%0.0f,%0.0f],!%i)", javascript, height, percentage, charging, low, r, g, b, colorBg] completionHandler:^(NSString *imageData, NSError *error) {
image = [UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:imageData]] scale:[UIScreen mainScreen].scale];
}];
[newWebView release];
}
else {
NSLog(@"LITHIUM: Using UIWebView");
UIWebView *webView = [[UIWebView alloc] initWithFrame:CGRectZero];
[webView loadHTMLString:nil baseURL:nil];
image = [UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:[webView stringByEvaluatingJavaScriptFromString:[NSString stringWithFormat:@"(function%@)(%0.0f,%i,!!%i,!%i,[%0.0f,%0.0f,%0.0f],!%i)", javascript, height, percentage, charging, low, r, g, b, colorBg]]]] scale:[UIScreen mainScreen].scale];
[webView release];
}
return image;
}
@end
注意:我不是某些,这是导致崩溃的功能。
查看系统日志,我可以看到崩溃前已记录LITHIUM: Using WKWebView
,因此我认为崩溃发生在第一个if
语句中。
我在这里使用WKWebView不正确吗?这个功能有没有其他原因可以崩溃?
答案 0 :(得分:1)
WKWebview evaluateJavaScript:completionHandler:
是异步的,但您在创建后立即发布了webview。此外,即使它没有崩溃,你也会返回一个零图像,因为在退出函数之前不会调用完成块。
我不确定你想要实现什么,但你应该使用旧的UIWebview,或者更改你的函数以返回void并在完成时使用完成块