iOS 7 UIWebView ne rend pas

Je transfère mon application vers iOS 7 et j'ai un problème avec UIWebView dans iOS 7. Je charge la string html locale avec ce code:

NSURL *baseURL = [NSURL fileURLWithPath: DOCUMENTS_DIRECTORY]; [self.descWebView loadHTMLSsortingng:html baseURL:baseURL]; 

Il fonctionne parfaitement sur iOS 6 et antérieur 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.

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é cela. Comme d'autres ont fait allusion dans les commentaires, ce bug a été corrigé dans la version 4.3.1 du SDK Crittercism.

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

correction: Solution de contournement pour les applications qui ne voient pas UIWebViews charger des données lors du premier lancement lors de l'exécution sur iOS 7. Cela se produit uniquement dans les applications sous-class UIWebView et Crittercism a déposé un rapport de bogue avec Apple. Remarque – Sachez que même si votre application ne peut pas directement sous-classr UIWebView, cela se fait dans de nombreuses bibliothèques tierces communes, telles que les SDK Google AdMob et Millenial Media.

Pour ceux d'entre nous qui ont mis Crittercism à jour vers la version 4.1.2 en espérant que cela réglerait le problème, mais ce n'est pas le cas. Je peux offrir une solution assez laide mais simple: créer et initialiser 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 loadHTMLSsortingng:@"<!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 eu cette erreur apparaissant essayant d'afficher des admob ads, quand jamais crittercism a été permis j'obtiendrais cette erreur dans les journaux, d'ailleurs les annonces n'affichaient pas non plus.

Pour y remédier, j'ai désactivé l'instrumentation de crittercism, ceci pourrait ne pas être 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'append comme une sous-vue) comme suggéré par d'autres semble fonctionner pour moi aussi.

 [[UIWebView alloc] initWithFrame:CGRectMake(-1, -1, 1, 1)] [Crittercism enableWithAppID:@"your_app_id"]; 

Essayez le product --> clean . Ça ne peut pas faire mal. Lorsque vous exécutez une application, elle ne replace/comstack les files modifiés. Parfois, le xCode corrige et ne comstack pas un file modifié. Le nettoyage du produit supprime les anciennes versions du code compilé. Ainsi, la prochaine fois que vous le comstackrez, tout sera extrait de la dernière compilation. Encore vous n'avez rien à perdre en le faisant.

Je vois le même problème que vous. J'ai essayé:

  • déplacer la request de chargement de viewDidLoad vers viewWillAppear et viewDidAppear, cela n'a rien arrangé
  • essayé de recharger le webview après que la request de chargement a été faite. toujours rien
  • essayé de changer la création d'URL de URLWithSsortingng à fileURLWithPath et toujours rien

Ce qui est encore plus étrange, c'est qu'aucune des methods des delegates ne se triggers lorsque la page ne se charge pas. C'est presque comme si la vue web n'essayait 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 que vous la rouvrez, tout fonctionne correctement.

avez-vous été capable de find un moyen de contourner cela ou trouvé une solution?

J'ai eu des problèmes similaires avec mon application PhoneGap sur IOS7, j'ai dû redessiner l'interface user 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 arriver au cas où vous utilisez quelque chose qui n'est pas disponible dans cette version iOS particulière .. par exemple

NSSsortingng * test = @ "test this";

[test containsSsortingng: @ "test"];

l'utilisation de containsSsortingng dans iOS 7.1 vous donnera la même erreur, mais cela fonctionnera bien dans iOS 8.0,

void SendDelegateMessage (NSInvocation *): delegate (webView: decisionPolicyForNavigationAction: requête: frame: decisionListener 🙂 n'a pas pu returnner après avoir attendu 10 secondes. mode de boucle d'exécution principale: kCFRunLoopDefaultMode

J'ai rencontré ce problème aussi. Il semble que le problème soit causé lorsque certaines bibliothèques tierces sont liées, mais je ne suis même pas sûr de savoir exactement lequel était responsable dans mon cas. Je n'ai pas eu de Crittercism dans mon application.

Ce qui m'a arrangé, c'est la suggestion que j'ai trouvée ici sur le Dev Forum d'Apple pour instancier un UIWebView tôt.

 - (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 la version 1.6.x sous iOS7 / iOS8 et la sous-class UIWebView, le même problème apparaîtra si vous utilisez la méthode PFInstallation saveInBackground .

La solution est de retarder l'appel saveInBackground , par exemple:

 dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 3.f * NSEC_PER_SEC), dispatch_get_main_queue(), ^{ [currentInstallation saveInBackground]; });