0

我的调整发生了崩溃,我相信它发生在这个函数的某个地方:

@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 吗?此功能可能会崩溃还有其他原因吗?

4

1 回答 1

1

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

我不确定您要达到什么目的,但是您应该使用旧的 UIWebview,或者更改您的函数以返回 void 并在完成后使用完成块

于 2014-11-19T16:25:34.430 回答