iOS 7 UIWebView无法渲染

usa*_*akc 28 uiwebview ios ios7

我正在将我的应用程序移植到iOS 7,我在iOS 7中遇到UIWebView问题.我使用以下代码加载了本地html字符串:

NSURL *baseURL = [NSURL fileURLWithPath: DOCUMENTS_DIRECTORY];
[self.descWebView loadHTMLString:html baseURL:baseURL];
Run Code Online (Sandbox Code Playgroud)

它在iOS 6和之前的版本上完美运行,但在iOS 7上它无法渲染,UIWebView仍然是白色的.此消息显示在控制台中:

void SendDelegateMessage(NSInvocation *): delegate
(webView:decidePolicyForNavigationAction:request:frame:decisionListener:)
failed to return after waiting 10 seconds. main run loop mode: kCFRunLoopDefaultMode
Run Code Online (Sandbox Code Playgroud)

谢谢你的回复.

Tru*_*nse 11

正如@zaplitny所提到的,我不得不将Crittercism更新到最新版本(4.1.0),以免这个问题消失.

  • 我刚刚接触了生物支持.显然问题已在[4.3.1]中解决(https://app.crittercism.com/downloads/release_notes/ios/4.3.1) (5认同)
  • 我正在使用Crittercism 4.1.1(RC),我有这个问题.这似乎是间歇性的,所以我无法通过禁用/启用它来确认它是否是一个批判性问题. (4认同)

小智 9

旧版本的Crittercism库出现问题导致了这个问题.正如其他人在评论中提到的那样,这个错误在Crittercism SDK的4.3.1版本中得到了修复.

https://app.crittercism.com/downloads/release_notes/ios/4.3.1:

修复:遇到UIWebViews的应用程序在iOS 7上运行时无法在首次启动时加载数据的解决方法.这仅发生在子类UIWebView的应用程序中,并且Crittercism已向Apple提交了错误报告.注意 - 请注意,虽然您的应用程序可能不直接将UIWebView子类化,但这可以在许多常见的第三方库中完成,例如Google AdMob和Millenial Media SDK.

  • 对我来说重要的部分是"请注意,虽然您的应用程序可能不会直接将UIWebView子类化,但这可以在许多常见的第三方库中完成,例如Google AdMob和Millenial Media SDK".谢谢. (2认同)

And*_*kyi 7

对于我们这些将Crittercism更新到版本4.1.2的人,他们希望它可以解决问题,但事实并非如此.我可以提供一个非常丑陋但简单的解决方案:UIWebView在调用之前创建并初始化[Crittercism enableWithAppID:@"***...***"];

- (BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions {
    ...
    UIWebView* fakeWebView = [[[UIWebView alloc] initWithFrame:CGRectMake(-1, -1, 1, 1)] autorelease];
    [fakeWebView loadHTMLString:@"<!DOCTYPE HTML><html><body>I need Crittercism</body></html>" baseURL:nil];
    [mainViewController.view addSubview:fakeWebView];

    [Crittercism enableWithAppID:@"***...***"];
    ...
}
Run Code Online (Sandbox Code Playgroud)

这个技巧不仅让我摆脱了所描述的问题,而且还略微加快了真实的第一次初始化UIWebView.