2009-08-25 13 views
3

par exemple, nous utilisons cette méthode dans le tableviewméthodes compréhension c objectif

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { 
    return 16; 
} 

je veux apprendre que nous ne remettons pas cette méthode ne importe où, mais cette valeur application lit comment est-il? il y a beaucoup de méthodes comme celle-ci que nous n'avons pas appelé.

+0

UITableViews l'appelle quand il le faut. Je ne sais pas comment les créer etc .. Je suis aussi nouveau à cela. –

+0

En outre, indentez votre code avec quatre espaces dans ce post et voir ce qui se passe. –

Répondre

11

Votre objet a été défini en tant que source de données de UITableView quelque part. Très probablement, en faisant une connexion à InterfaceBuilder, mais il est facile de le faire dans le code en définissant la propriété dataSource du UITableView:

- (void) setUpMyJunkMan 
{ 
    myTableView.dataSource = self; 
} 

Une fois que vous avez défini votre objet comme source de données, la table sera invoquez la méthode si nécessaire pour déterminer ce dont elle a besoin ou comment elle doit réagir aux événements.

Votre objet est requis pour implémenter le protocole UITableViewDataSource (bien que, si vous avez connecté la source de données via InterfaceBuilder, il n'y a pas de problème si vous ne le faites pas - il s'agit plus d'une validation de compilation qu'un runtime). Si vous regardez la déclaration UITableViewDataSource, vous verrez qu'un certain nombre de méthodes sont @optional.Le reste sont @required; vous devez les implémenter pour remplir le contrat du protocole.

Ceci est la principale différence entre les sources de données et les délégués. Les délégués peuvent éventuellement implémenter n'importe laquelle des méthodes déclarées. Les sources de données créent une relation beaucoup plus formelle entre les deux objets dans laquelle certaines des méthodes doivent être implémentées.

+0

dataSoure -> source de données –

1

Un moyen simple de voir pourquoi une méthode est appelée - définir un point d'arrêt, exécuter en mode débogage, puis regarder la trace de la pile.

Pour ce cas particulier - Il est appelé automatiquement par le framework lorsqu'il affiche la vue de la table.

Je pense que vous avez vraiment besoin de jeter un coup d'œil à The Table View Programming Guide afin que vous ayez une bonne compréhension des méthodes que vous devez remplacer (et non remplacer) lorsque vous utilisez les vues de table. Si vous étendez la classe TableViewController, le framework fait beaucoup de travail et vous devez à peine écrire du code.

+0

La définition d'un point d'arrêt ne permet pas réellement de comprendre pourquoi la méthode est appelée, elle ne fait que confirmer ce que cela a appelé ... Lors de l'implémentation du protocole UITableViewDataSource, aucun remplacement n'est en cours. Mise en œuvre juste (sauf pour tirer parti du contrôleur comme vous l'avez mentionné). – bbum

-1

numberOfSectionsInTableView: est appelée par la vue de table. Vous implémentez numberOfSectionsInTableView: dans le cadre du protocole UITableViewDataSource. Chaque UITableView reçoit un dataSource. Normalement, UITableView sera construit par un UITableViewController qui se définira comme dataSource de la vue. Lorsque l'affichage est affiché, il appelle numberOfSectionsInTableView: sur dataSource. Ceci est expliqué dans le Table View Programming Guide for iPhone OS.

+0

Encore une fois, ce n'est pas un délégué. Le protocole UITableViewDataSource a des méthodes requises très explicites pour répondre aux exigences. – bbum

+0

@bbum, je ne pense pas que les protocoles délégués doivent avoir seulement des méthodes optionnelles. Voir SKProductsRequestDelegate et ABNewPersonViewControllerDelegate pour des exemples ayant des méthodes requises. –

+0

Les deux bogues, malheureusement. – bbum

-4

Cela fait partie d'une interface de délégué.

À un certain point de votre application (éventuellement dans votre UIBuilder), vous avez spécifié que l'objet qui contient la méthode est réellement l'objet délégué. Cela signifie que lorsque vous voulez ajuster le comportement (dans ce cas d'un UITableView) vous pouvez sans étendre réellement UITableView mais modifier mearly les méthodes de délégué.

La classe UITableView ressemblera fondamentalement à ceci.

- (void) AMethodinUiTableView 
{ 

int colums =[self.delegate numberOfSectionsInTableView:self]; 
} 

Pour plus d'informations je voudrais vérifier la programmation delgate et les sélecteurs.

+0

Cette réponse est incorrecte. (1) Ceci n'est pas une délégation. (2) La syntaxe * example * de la méthode est tout simplement erronée. La suggestion de vérifier la programmation des délégués et les sélecteurs est correcte; ils sont reliés. – bbum