28 votes

iOS 7 UIWebView ne rend pas l'image

Je suis en train de porter mon application vers iOS 7 et j'ai un problème avec UIWebView dans iOS 7. Je charge une chaîne html locale avec ce code :

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

Cela fonctionne parfaitement sur iOS 6 et antérieur mais sur iOS 7 il n'y a pas de rendu et le 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.

11voto

Trunal Bhanse Points 623

Comme mentionné par @zaplitny, j'ai dû mettre à jour Crittercism à la dernière version (4.1.0) pour que ce problème disparaisse.

9voto

Jeremiah Edwards Points 161

Il y avait un problème avec une ancienne version de la bibliothèque Crittercism qui a causé cela. Comme d'autres l'ont mentionné dans les commentaires, ce bogue a été corrigé dans la version 4.3.1 du SDK Crittercism.

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

fixer : Solution de contournement pour les applications dont les UIWebViews ne chargent pas les données au premier lancement sous iOS 7. lors du premier lancement sous iOS 7. Cela ne se produit que dans les applications qui sous-classe UIWebView, et Crittercism a déposé un rapport de bogue auprès d'Apple. Note - Soyez conscient que même si votre application ne sous-classe pas directement UIWebView, cela est fait dans de nombreuses bibliothèques tierces communes telles que les bibliothèques Google AdMob et Millenial Media SDKs.

7voto

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. Je peux offrir une solution assez moche 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 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 réel UIWebView .

3voto

nacross Points 711

J'ai eu cette erreur en essayant d'afficher des publicités admob, quand le crittercism a été activé, j'ai eu cette erreur dans les journaux, d'ailleurs les publicités ne s'affichaient pas non plus.

Pour le corriger, j'ai désactivé l'instrumentation du crittercisme, ce qui 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 le cas, il suffit de créer une vue Web (il n'est pas nécessaire de l'ajouter en tant que sous-vue), comme le suggèrent d'autres personnes, pour que cela fonctionne.

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

2voto

Paulpjmmchugh Points 81

Essayez product --> clean . Cela ne peut pas faire de mal. Quand vous lancez une application, elle ne fait que replace/compile les fichiers qui ont changé. Parfois, les xCode se bloque et ne compile pas un fichier modifié. Le nettoyage du produit supprime les anciennes versions du code compilé, de sorte que la prochaine fois que vous construisez, tout aura été fait depuis la dernière compilation. Encore une fois, vous n'avez rien à perdre en le faisant.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X