2010-05-17 2 views
0

J'essaie d'appeler un contrôleur de vue de table modale en utilisant presentModalViewController mais je ne suis pas sûr de ce qu'il faut faire avec le délégué. Le code suivant me donne une erreur:iphone: Implémenter un délégué dans la classe

MyRidesListView *controller = [[MyRidesListView alloc] init]; 
    controller.delegate = self; 
    [self presentModalViewController:controller animated:YES]; 
    [controller release]; 

Erreur:

Request for member 'delegate' is something not a structure or union 

Maintenant, je réalise qu'il n'y a pas de propriété délégué dans ma classe de MyRidesListView. Alors, comment pourrais-je ajouter une référence à mon délégué? Qu'est-ce que j'oublie ici?

+0

Qu'est-ce que MyRidesListView? Quelle est la classe parent? – hanno

+0

Il s'agit d'un UITableViewController. –

Répondre

4

En général, les délégués sont des propriétés définies comme telles:

id<NameOfDelegateProtocol> delegate; 

Et:

@property (nonatomic, assign) id<NameOfDelegateProtocol> delegate; 

EDIT: Vous avez dit que votre classe parent est UITableViewController. Vous avez peut-être voulu faire:

controller.tableView.delegate = self; 
+0

Que voulez-vous dire par Protocole? –

+0

Les délégués impliquent généralement quelque chose comme UITableViewDelegate. Ce sont des protocoles. Si tout ce que vous vouliez faire était de définir le délégué de la table, vous vouliez probablement définir controller.tableView.delegate au lieu de controller.delegate. Sinon, je peux ajouter une explication plus complète à la réponse ci-dessus. – MrHen

1

Pourquoi pensez-vous avoir besoin d'un délégué? Pourquoi ne pas simplement supprimer la ligne "controller.delegate = self". Dans le cas contraire, vous devez implémenter un système de délégué de la manière décrite ci-dessous ou bien faire de MyRidesListView une sous-classe d'un viewcontroller qui implémente des délégués.

Il semble que vous ayez copié et collé un exemple de code qui utilise un délégué, puis substitué votre propre viewcontroller qui ne fournit pas de délégué. Si vous ne savez pas à quoi sert le délégué, effacez simplement cette ligne.

Je vais couper et coller du code réelle d'un de mes programmes de test pour vous montrer comment il est fait:

à partir du fichier d'interface:

Ajouter une instance de délégué variable à votre classe et de le rendre une propriété de sorte que vous pouvez utiliser la syntaxe "blah.delegate = foo" pour le définir.

@interface BAPClient : NSObject { 
    CGSize imageSize; 
    id <BAPClientDelegate> delegate; 
} 

@property (nonatomic, readonly) CGSize imageSize; 
@property (nonatomic, assign) id <BAPClientDelegate> delegate; 
@end 

// define the protocol spoken. (what the delegate must implement) 

@protocol BAPClientDelegate 
- (void)addTile:(BAPTile *)tile; 
@end 

dans la mise en œuvre, vous devez appeler le délégué au moment opportun:

- (void)deliverTile:(BAPTile *) tile { 
    NSLog(@"%s tile=%p",__FUNCTION__,tile); 
    if ([self delegate]) 
     [[self delegate] addTile:tile]; 

    [tile release]; 
} 
0

Essayez de définir l'objet délégué par le poseur

[controller setDelegate:self]; 

Cela fonctionne souvent des merveilles.

+0

Cela me donne juste des erreurs. –

+0

Etes-vous sûr que le contrôleur a une propriété de délégué? – cem

+0

Non, ce n'est pas ce que j'essaie d'apprendre à ajouter. –

Questions connexes