2010-06-02 6 views
4

J'ai réussi à ajouter mes propres modèles d'URL à mon application. L'application démarre correctement en utilisant les schémas.handleOpenURL non appelé à l'aide d'un schéma d'URL personnalisé dans iPhone OS

Maintenant je veux gérer les données entrantes mais le délégué n'est pas appelé. Il est une application universelle et j'ai ajouté la fonction suivante à la fois AppDelegates:

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url { 
    if (!url) { return NO; } 

    NSString *URLString = [url absoluteString]; 
    UIAlertView *alert = [[UIAlertView alloc] 
          initWithTitle:NSLocalizedString(@"test message", nil) 
          message:URLString 
          delegate:self 
          cancelButtonTitle:nil otherButtonTitles:@"OK", nil]; 
    [alert show];  
    [alert release]; 
    return YES; 
} 

Je teste avec un schéma comme: myapp: //appalarm.com ... et s'attendre à être dans le appalarm.com URLString

Qu'est-ce qui ne va pas?

Merci pour vos réponses!

Répondre

5

Si votre délégué d'application a implémenté 'applicationDidFinishLaunchingWithOptions:', la méthode 'handleOpenURL:' ne sera jamais appelée. Regardez les options transmises via l'autre méthode pour déterminer comment votre application a été lancée et quel comportement vous devez implémenter.

+2

merci! l'url est également contenue dans le lancementOptions dans la clé UIApplicationLaunchOptionsURLKey – favo

+0

Incorrect! handleOpenURL sera appelé peu après applicationDidFinishLaunchingWithOptions si vous renvoyez YES. voir la section 'Gestion des demandes d'URL' dans le chapitre 'Inter-App Communication' sur le 'Guide de programmation d'applications pour iOS' par Apple. – AmitP

7

J'ai essayé de clarifier dans another post. La réponse d'Ashley Clark n'est que partiellement correcte. Sous OS 4.0, le handleOpenURL est appelé (au moins pour les URL de fichiers) et vous devez l'implémenter pour gérer les appels d'URL ouverts lorsque l'application est en arrière-plan. Ainsi, l'ouverture du fichier dans les deux méthodes peut l'ouvrir deux fois (si applicationDidFinishLaunchingWithOptions a retourné YES, ce qui est le cas). Voir another post.

1

Tentez votre code dans la fonction ci-dessous

-(BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation { 
    if (!url) { return NO; } 

    NSString *URLString = [url absoluteString]; 
    UIAlertView *alert = [[UIAlertView alloc] 
          initWithTitle:NSLocalizedString(@"test message", nil) 
          message:URLString 
          delegate:self 
          cancelButtonTitle:nil otherButtonTitles:@"OK", nil]; 
    [alert show];  
    [alert release]; 
    return YES; 
}