WKWebView可能崩溃

时间:2014-11-19 15:55:03

标签: ios objective-c theos wkwebview

我的调整中出现了崩溃,我相信它正在这个功能的某个地方发生:

@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不正确吗?这个功能有没有其他原因可以崩溃?

1 个答案:

答案 0 :(得分:1)

WKWebview evaluateJavaScript:completionHandler:是异步的,但您在创建后立即发布了webview。此外,即使它没有崩溃,你也会返回一个零图像,因为在退出函数之前不会调用完成块。

我不确定你想要实现什么,但你应该使用旧的UIWebview,或者更改你的函数以返回void并在完成时使用完成块