2010-11-25 29 views
13

Je ne sais pas quand ou pourquoi je devrais utiliser [[UIApplication sharedApplication] delegate]Lorsque l'utilisation [[délégué UIApplication sharedApplication]]

J'utilise quand délégué [self.navigationController pushViewController:myView Animation:YES] navigate does't. Je fais MyView *delegate = [[UIApplication sharedApplication] delegate] et [delegate pushViewController:myView Animation:YES] pour que la navigation fonctionne correctement.

Je ne sais pas si la solution est correcte et en plus je ne sais pas quelle est l'utilisation pour [[UIApplication sharedApplication] delegate] ou quels sont ses effets sur l'application.

Quelqu'un peut-il m'aider?

Merci!

+0

Vérifiez la sortie déléguée de UIApplication dans Interface Builder. On dirait qu'il est connecté à un contrôleur de navigation, ce qui ne semble pas être OK. – Costique

Répondre

22

[[UIApplication sharedApplication] delegate] vous donnera un pointeur vers votre délégué. celui qui a été créé automatiquement lorsque vous avez créé le projet. Habituellement, il s'appelle YourAppNameAppDelegate.

deux choses sont un peu faux avec votre code.

  1. lorsque vous déclarez MyView *delegate cela devrait être soit id delegate ou YourAppNameAppDelegate *delegate.

  2. Vous ne devriez pas avoir à accéder à votre navigationController via le délégué de l'application. Je voudrais voir pourquoi self.navigationController échoue, et l'adresse. Vous mettez en œuvre un modèle singleton lorsque vous utilisez le délégué de l'application. Parce que le motif singleton est le motif de conception de programmation le moins cool, il ne vous rapportera aucun point lorsque vous parlez avec d'autres programmeurs.

+0

Merci beaucoup pour votre réponse !! mais je ne comprends pas quand je peux avoir besoin d'utiliser un pointeur vers le délégué de l'application. Où se trouve l'adresse self.navigationController que vous recherchez? – rasputin

5
self.appDelegate = [[UIApplication sharedApplication] delegate]; 

Lorsque vous créez une variable appelée appDelegate dans votre Ivars, il ne sera pas seulement Préparez-vous au délégué automagiquement app - vous devez définir vous-même. De n'importe où dans votre application, vous pouvez accéder au délégué par l'application singleton.

[UIApplication sharedApplication] < --- donne accès à la méthode déléguée singleton

renvoie un pointeur au délégué de l'application. Donc, puisque vos variables devaient être initialisées, il y a deux endroits logiques pour le faire - l'un est dans l'initialiseur si vous en créez un ou dans une méthode appelée au début de l'utilisation d'une vue et son contrôleur et cet endroit est dans viewDidLoad.