iOS 7 UIWebView Non Rendu
je transfère mon application sur iOS 7 et j'ai un problème avec UIWebView dans iOS 7. Je charge locale chaîne html avec ce code:
NSURL *baseURL = [NSURL fileURLWithPath: DOCUMENTS_DIRECTORY];
[self.descWebView loadHTMLString:html baseURL:baseURL];
il fonctionne parfaitement sur iOS 6 et prior mais sur iOS 7 Il ne rend pas et L'UIWebView est toujours blanc. Et ce message apparaît dans la console:
void SendDelegateMessage(NSInvocation *): delegate
(webView:decidePolicyForNavigationAction:request:frame:decisionListener:)
failed to return after waiting 10 seconds. main run loop mode: kCFRunLoopDefaultMode
Merci pour vos réponses.
10 réponses
comme mentionné par @zaplitny, j'ai dû mettre à jour Crittercism à la dernière version (4.1.0) Pour que ce problème disparaisse.
il y avait un problème avec l'ancienne version de la bibliothèque Crittercism qui a causé ceci. Comme d'autres l'ont mentionné dans les commentaires, ce bug a été corrigé dans la version 4.3.1 du SDK de Crittercism.
https://app.crittercism.com/downloads/release_notes/ios/4.3.1:
correction: solution de contournement pour les applications rencontrant UIWebViews défaut de charger des données lors du premier lancement sur iOS 7. Cela se produit uniquement dans les applications qui sous-classe UIWebView, et Crittercism a déposé un rapport de bogue avec Apple. Note - soyez conscient que, bien que votre application peut ne pas directement sous-classe UIWebView, cela se fait dans de nombreuses bibliothèques tierces communes telles que Google AdMob et Millenial médias SDK.
pour ceux d'entre nous qui ont mis à jour Crittercism à la version 4.1.2 en espérant que cela résoudrait le problème mais ce n'est pas le cas. I can offer quite ugly but simple solution: create and initialize UIWebView
avant d'appeler [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:@"***...***"];
...
}
cette astuce m'a permis non seulement de me débarrasser d'un problème décrit, mais aussi d'accélérer légèrement la première initialisation d'un vrai UIWebView
.
j'ai fait apparaître cette erreur en essayant d'Afficher des annonces admob, quand tout crittercism était activé, j'obtiendrais cette erreur dans les journaux, soit dit en passant les annonces n'étaient pas affichées non plus.
pour le réparer, j'ai désactivé l'instrumentation de crittercism, ce n'est peut-être pas une option pour tout le monde.
[Crittercism enableWithAppID:@"your_app_id" andDelegate:nil andURLFilters:nil disableInstrumentation:YES];
si ce n'est pas simplement créer un webview (vous n'avez pas besoin de l'ajouter en tant que subview) comme suggéré par d'autres semble fonctionner pour moi aussi.
[[UIWebView alloc] initWithFrame:CGRectMake(-1, -1, 1, 1)]
[Crittercism enableWithAppID:@"your_app_id"];
product --> clean
. Il ne peut pas nuire. Quand vous lancez une application il ne sera que replace/compile
les fichiers qui ont changé. Quelques fois l' xCode
bugs et de ne pas compiler un fichier modifié. Le produit clean supprime les anciennes versions du code compilé de sorte que la prochaine fois que vous le construisez aura été tout à partir de la dernière compilation. Encore une fois, vous n'avez rien à perdre en le faisant.
je vois le même problème que vous. J'ai essayé:
- déplacement de la demande de charge de la viewDidLoad à la viewWillAppear et viewDidAppear, cela n'a pas aidé quoi que ce soit
- essayé de recharger le webview après que la demande de charge ait été faite. toujours rien
- j'ai essayé de changer la création D'URL de URLWithString en fileURLWithPath et toujours rien
ce qui est encore plus étrange, c'est qu'aucun des délégués ne la page ne charge. c'est presque comme si la vue sur le web ne tentait même pas de charger la page. Pourtant, comme vous l'avez dit, si vous fermez l'application à partir de la vue multitâche et la rouvrir, tout fonctionne bien.
avez-vous été en mesure de trouver un moyen de contourner ce problème ou une solution?
j'ai eu des problèmes similaires avec mon application PhoneGap sur IOS7, j'ai dû redessiner L'interface utilisateur de la page sur "viewDidAppear" ou "Pageshow" en utilisant le code ci-dessous et cela a fonctionné pour moi.
$(".cls_div_page_content").redraw();
jQuery.fn.redraw = function() {
return this.hide(0, function(){$(this).show()});
};
plusieurs fois cette erreur peut se produire dans le cas où u utilise quelque chose qui n'est pas disponible dans cette version particulière d'iOS.. par exemple,
NSString *test=@"ce test";
[test containsString:@ "test"];
utilisation de containsString dans iOS 7.1 vous donnera la même erreur suivante, mais il fonctionnera très bien dans iOS 8.0,
void SendDelegateMessage( NSInvocation *): délégué (webView:decidePolicyForNavigationAction:demande:cadre:decisionListener:) pas de retour après 10 Secondes d'attente. mode boucle d'exécution principale: kCFRunLoopDefaultMode
je suis tombé sur cette question aussi. Il semble que le problème se pose lorsque certaines bibliothèques de tiers sont liées, mais je ne suis même pas sûr de savoir exactement qui était responsable dans mon cas. Je n'avais pas de Crittercism dans mon application.
ce qui l'a arrangé pour moi était la suggestion que j'ai trouvé here on Apple Dev Forum pour instancier un UIWebView
début.
- (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;
}
pour ceux qui utilisent Parse SDK avec le 1.6.version x sous iOS7 / iOS8 et sous-classe UIWebView, le même problème apparaîtra si vous utilisez PFInstallation saveInBackground
méthode.
la Solution est de retarder l'appel saveInBackground
, e.g.:
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 3.f * NSEC_PER_SEC), dispatch_get_main_queue(), ^{
[currentInstallation saveInBackground];
});