2010-11-09 4 views
0

Je suis sûr qu'il existe un moyen simple de résoudre ce problème, mais je ne peux pas comprendre.Définir le délégué pour le contrôleur de sous-vue

J'ai un TabBarViewController avec plusieurs vues. Dans certaines vues, j'ai chargé des vues de table avec du contenu XML. Mon analyseur XML fonctionne correctement, je l'ai testé auparavant dans un fichier Project distinct. Le problème est que mon TableViewController, pour lequel j'ai créé un XMLAppDelegate pour gérer l'analyse de mes fichiers xml, envoie toujours les méthodes au fichier de délégation principal de mon projet.

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[MainAppDelegate slices]: unrecognized selector sent to instance 0x6d1fd00' 

Comme le message d'erreur indique, il essaie de l'envoyer à mon MainAppDelegate, au lieu du XMLAppDelegate.

Je mis en œuvre le XMLAppDelegate dans mon contrôleur de fichiers et init le délégué de cette façon:

Le fichier .h de mon contrôleur

#import <UIKit/UIKit.h> 

@class XMLAppDelegate, NewsDetailViewController; 

@interface NewsViewController : UITableViewController <UITableViewDelegate, UITableViewDataSource> { 
    IBOutlet UITableView *newsTableView;  
    XMLAppDelegate *appDelegate; 
    NewsDetailViewController *ndvController; 
} 

@end 

Le fichier .m de mon contrôleur

- (void)viewDidLoad { 
[super viewDidLoad]; 
// self.navigationItem.rightBarButtonItem = self.editButtonItem; 

appDelegate = (XMLAppDelegate *)[[UIApplication sharedApplication] delegate]; 

self.title = @"Slices"; 

}

Le contrôleur est en cours de chargement dans TabBarView en tant que séparateur le fichier .xib. Dans ce fichier nib, j'ai connecté le délégué et la source de données à mon XMLAppDelegate.

Je reçois toujours cette erreur dans le journal et l'application se bloque lorsque j'essaie de passer à l'onglet souhaite le TableViewController en elle.

J'espère que vous comprenez mon problème. Peut-être que quelqu'un pourrait me dire ce que je fais mal ici en réglant le délégué à mon XMLAppDelegate.

EDIT:

Pour expliquer ce que je veux faire:

J'ai une classe XMLParser pour analyser le fichier, une classe de tranche pour stocker les éléments et XMLAppDelegate. A partir de ces fichiers, mes résultats XML sont stockés dans un tableau avec le nom "tranches". Pour utiliser les éléments du tableau, pour l'afficher en tant que Table ou étiquette de texte, j'ai connecté TableViewController à XMLAppDelegate (qui analyse mon document XML en utilisant le fichier XMLParser et stocke des données dans le tableau).

Les éléments de ce tableau sont déjà déclarés dans les fichiers comme des chaînes comme celui-ci

@property (nonatomic, readwrite) NSInteger sliceID; 
@property (nonatomic, retain) NSString *image; 
@property (nonatomic, retain) NSString *title; 
@property (nonatomic, retain) NSString *text; 

Mais comme je l'ai dit, les travaux de l'analyseur. Je pense que mon problème semble être que j'ai demandé appDelegate.slices, mais le sélecteur n'est pas mon XMLAppDelgate. L'erreur indique qu'il utilise le délégué principal, qui n'a aucune propriété du fichier xml Delegate.

TabView charge le NewsViewController, qui appelle le tableau dans XMLAppDelegate. J'ai implémenté les fichiers, connecté le délégué à TableView en tant que source de données et délégué, mais il semble toujours prendre le délégué principal.

Ça me rend fou. Le projet est un profil d'entreprise pour un grand motel de bien-être. Je reçois le contenu du CMS sous forme de fichiers XML et dois y accéder à partir de XMLAppDelegate, qui fournit le contenu des sites.

J'espère que vous comprenez mon mauvais anglais. ;)

Répondre

0

Donc, now you've declared the property, mais vous ne l'avez pas implémenté. Une déclaration de propriété, entre autres, déclare que vous allez implémenter une ou deux méthodes d'accès pour la propriété. Donc, ce n'est pas (encore) suffisant pour déclarer la propriété; vous devez également implémenter les méthodes d'accès qui rendent cette propriété réelle au moment de l'exécution.

La méthode la plus simple pour résoudre ce problème consiste à synthétiser les accesseurs de la propriété slices. Si vous avez besoin d'un comportement personnalisé, vous pouvez les implémenter vous-même, mais cela ne vous ressemble pas: la synthèse est non seulement la plus simple, mais probablement la bonne solution. Pour plus d'informations, voir the documentation on properties pour plus d'informations.

+0

D'accord, problème résolu. J'ai implémenté l'Analyseur dans mon AppDelegate principal. Après cela, l'appel de la méthode Parser fonctionne. ;) – DevZarak

0

Peut-être que je ne sais pas comment votre XMLappDelegate, mais à mon avis

[[UIApplication sharedApplication] delegate] 

vous donne toujours la principale AppDelegate, tout ce que vous le jeter dans. Peut-être que vous devez ajouter une référence à votre XMLAppDelegate à votre délégué App principal et le déclarer comme une propriété, vous pouvez accéder à la XMLAppDelegate par

AppDelegate.xmlDelegate 

Là encore, je ne comprends pas vraiment ce que vous essayez de faire Peut-être hélas de toute façon;)

+0

Il a réellement une telle propriété; Il l'a montré dans son autre question: http://stackoverflow.com/q/4125632/30461 Cela dit, nous pouvons tous les deux convenir que le délégué XML et le délégué de l'application ne devraient probablement pas être le même objet. –

Questions connexes