Comment gérer les app Url dans une UIWebView?

J'ai récemment découvert que mon UIWebView était d'étouffement sur ITMS liens. Plus précisément, à partir de la UIWebView dans mon application, si je navigue sur un site comme cette une et cliquez "Disponible sur l'App Store" lien, UIWebView serait d'erreur avec "Erreur de Domaine=WebKitErrorDomain Code=101 L'URL ne peut pas être affichée."

Après un peu de recherche sur Google, j'ai réalisé que j'avais besoin de prendre les demandes d'application des liens et iOS de les manipuler. J'ai commencé par regarder pour voir si le système démarre avec "imt" dans -webView:shouldStartLoadWithRequest:navigationType:, mais s'est rendu compte qu'il pourrait y avoir d'autres types d'application liens que le système peut gérer. Donc j'ai plutôt ceci:

- (void)webView:(UIWebView *)wv didFailLoadWithError:(NSError *)error {
    //Give iOS a chance to open it.
    NSURL *url = [NSURL URLWithString:[error.userInfo objectForKey:@"NSErrorFailingURLStringKey"]];
    if ([error.domain isEqual:@"WebKitErrorDomain"]
        && error.code == 101
        && [[UIApplication sharedApplication]canOpenURL:url])
    {
        [[UIApplication sharedApplication]openURL:url];
        return;
    }

    //Normal error handling…
}

J'ai deux questions à ce sujet:

  1. Est-ce sain? Je vais vérifier spécifiquement pour l'erreur de domaine et le code d'erreur et de récupérer l'URL de la chaîne de la userInfo. C'est que des trucs susceptibles de rester?
  2. Cela fonctionne pour l'mentionnées ci-dessus app store lien, mais quand je passe de mon application, il semble y avoir eu une ultérieure échec de la demande a échoué avec le "Cadre de chargement interrompu". comment puis-je me débarrasser de ça? Il n'arrive pas, quand j'ai le handle de la demande de -webView:shouldStartLoadWithRequest:navigationType:, donc c'est un peu ennuyeux.

Comment vous gérer de telles demandes?

InformationsquelleAutor theory | 2010-11-28