我将我的应用移植到iOS 7,我在iOS 7中遇到UIWebView问题。 我用这段代码加载了本地的html字符串:
NSURL *baseURL = [NSURL fileURLWithPath: DOCUMENTS_DIRECTORY];
[self.descWebView loadHTMLString:html baseURL:baseURL];
它在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
感谢您的回复。
答案 0 :(得分:11)
如@zaplitny所述,我不得不将Crittercism更新到最新版本(4.1.0),以免这个问题消失。
答案 1 :(得分: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。
答案 2 :(得分: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:@"***...***"];
...
}
这个技巧不仅让我摆脱了所描述的问题,而且还略微加快了真实UIWebView
的首次初始化。
答案 3 :(得分:3)
我出现了这个错误,试图显示admob广告,当启用了批评时,我会在日志中出现错误,顺便说一下广告也没有显示。
为了解决这个问题,我禁用了生物仪器,这可能不适合所有人。
[Crittercism enableWithAppID:@"your_app_id" andDelegate:nil andURLFilters:nil disableInstrumentation:YES];
如果不是简单地按照其他人的建议创建一个webview(你不需要将它添加为子视图)似乎对我有用。
[[UIWebView alloc] initWithFrame:CGRectMake(-1, -1, 1, 1)]
[Crittercism enableWithAppID:@"your_app_id"];
答案 4 :(得分:2)
试试product --> clean
。它不会伤害。当您运行应用程序时,它只会replace/compile
更改的文件。有时xCode
错误并且不编译已更改的文件。产品干净删除旧版本的已编译代码,因此下次构建时,将完全从上次编译开始。再做一次,你没有什么可失去的。
答案 5 :(得分:1)
我看到了同样的问题。我试过了:
更奇怪的是,当页面没有加载时,没有任何委托方法触发。几乎就好像Web视图甚至没有尝试加载页面。然而,就像你说的,如果你从多任务视图关闭应用程序并重新打开它,一切正常。
您是否能够找到解决方法或找到解决方案?
答案 6 :(得分:1)
我在IOS7上的PhoneGap应用程序遇到了类似的问题,我不得不使用下面的代码在“viewDidAppear”或“Pageshow”上重绘页面的UI,这对我有用。
$(".cls_div_page_content").redraw();
jQuery.fn.redraw = function() {
return this.hide(0, function(){$(this).show()});
};
答案 7 :(得分:1)
NSString * test = @&#34;测试这个&#34 ;;
[test containsString:@&#34; test&#34;];
在iOS 7.1中使用containsString会给你相同的跟随错误,但它在iOS 8.0中可以正常工作,
void SendDelegateMessage(NSInvocation *):delegate(webView:decisionPolicyForNavigationAction:request:frame:decisionListener :) 等了10秒后没能回来。主运行循环模式:kCFRunLoopDefaultMode
答案 8 :(得分:1)
我也遇到过这个问题。似乎问题是在链接某些第三方库时引起的,但我甚至不确定在我的情况下究竟是哪一个负责。我的应用程序中没有Crittercism。
为我修复的是我发现here on Apple's Dev Forum提前UIWebView
实例化的建议。
- (BOOL)application:(UIApplication *)application willFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// In a severe case of WTF: some 3rd party libs (exact culprit unknown) can cause webviews to stop
// showing anything on iOS 7, and instead have console warnings every 10 seconds that look like:
// void SendDelegateMessage(NSInvocation *): delegate (webView:decidePolicyForNavigationAction:request:frame:decisionListener:) failed to return after waiting 10 seconds. main run loop mode: kCFRunLoopDefaultMode
// Just instantiating an UIWebView before any of the 3rd party libs kick in is enough to fix it.
// Don't know why, but it works.
if (SYSTEM_VERSION_LESS_THAN(@"8.0")) {
UIWebView *webView = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0, 320, 320)];
webView.delegate = nil; // Do something with webView to silence warning
}
return YES;
}
答案 9 :(得分:0)
对于那些在iOS7 / iOS8和子类UIWebView下使用1.6.x版本的Parse SDK的用户,如果使用PFInstallation saveInBackground
方法,则会出现同样的问题。
解决方案是延迟通话saveInBackground
,例如:
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 3.f * NSEC_PER_SEC), dispatch_get_main_queue(), ^{
[currentInstallation saveInBackground];
});