2009-06-17 8 views
2

J'ai une classe de lecteur XML que j'INITIALISER une URLQuel est le meilleur endroit pour configurer un ivar View Controller?

- (id)initWithURL:(NSURL *)url 

Cette classe ajoute des objets à un tableau dans la classe d'appel en utilisant une variable d'instance

// in the interface 
ViewController *viewController; 
// in the implementation 
[viewController addObject:theObject]; 

Maintenant, j'initialiser mon lecteur XML classe, puis réglez le View Controller séparément:

XMLController *xmlController = [[XMLController alloc] 
        initWithURL:url]; 
xmlController.viewController = self; 

Ma question est de savoir si je créer une nouvelle fonction init qui définit la ViewCon troller en même temps. Merci.

Édition: J'ai oublié d'ajouter que mon lecteur XML commence à télécharger et à analyser la classe dans la fonction init.

Répondre

2

Si votre routine init doit provoquer des appels de délégué/contrôleur, ou déclencher des activités asynchrones (pouvant inclure votre téléchargement) pouvant envoyer un message au délégué, vous devez l'inclure dans la fonction init. Dans le cas contraire, votre contrôleur pourrait manquer des messages de délégation potentiels tels que xmlController: didStartConnection qui pourrait être appelé avant que votre routine initWithURL ne retourne.

De même, si le contrôleur/délégué est une partie obligatoire des activités de XMLController, vous devez l'inclure dans votre routine init.

Alors oui, dans ce cas, je suggère:

XMLController *xmlController = [[XMLController alloc] initWithURL:url andController:self]; 
4

Tout dépend de vous. Vous pouvez voir des exemples des deux styles partout dans le code d'Apple.

Tant que vous ne faites aucune supposition concernant la valeur de la propriété viewController étant constante dans le temps, il est préférable de la laisser telle quelle. Par ailleurs, vous pourriez envisager de refactoriser la logique addObject: en un protocole au lieu de requérir une sous-classe spécifique. Quelque chose comme:

-xmlController:didDecodeObject: 

Ou tout ce qui est logique pour la logique de votre objet XMLController.

Questions connexes