2010-11-25 6 views
0

D'accord, je suis maintenant bloqué pendant environ 3 heures et lire tous les autres fils ici et ce que je pouvais trouver sur Google et a fait beaucoup de trialAndError, mais il n'a pas aidé. Notez que je suis un débutant avec Objective C et Cocoa Touch.UITableView redessiner

J'ai une sous-classe UITableViewConroller. Je veux être en mesure d'ajouter des cellules par programme. Je substitue les méthodes suivantes:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 

    SectionInfo *obj = nil; 
    obj = [dataSourceMutableArray objectAtIndex:section]; 
    return [obj GetNumberOfCells]; 
} 

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { 
    return [dataSourceMutableArray count]; 
} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    UITableViewCell *cell = nil; 
    CellInfo *cellInfo = nil; 
    SectionInfo *si = [dataSourceMutableArray objectAtIndex:indexPath.section]; 
    cellInfo = [si.cellInfos objectAtIndex:indexPath.row]; 
    cellInfo.mypath = indexPath; 
    cell = cellInfo.cell; 

    return cell; 
} 

Les objets CellInfo et SectionInfo sont simplement des wrappers. Un sectionInfo contient un tableau d'objet CellInfo, qui contient à nouveau la cellule. La vue est dessinée comme prévu, quelles que soient les sections et les cellules initialisées.

Quand je plus tard ajouter une cellule à une section, et appelle [tableViewController.tableView reloadData] ;, rien ne se passe. Définir un point d'arrêt dans "cellForRowAtIndexPath" et "numberOfRowsInSection" me montre que "cellForRowAtIndexPath" est appelé lorsque je fais glisser la vue de la table hors de vue, mais "numberOfRowsInSection" ne sera jamais appelé à nouveau. Cela pourrait-il être le problème?

J'ai aussi essayé des trucs comme ça:

NSArray* a = [NSArray arrayWithObjects:      [NSIndexPath indexPathForRow:2 inSection:0],      [NSIndexPath indexPathForRow:3 inSection:0],       [NSIndexPath indexPathForRow:2 inSection:1],      [NSIndexPath indexPathForRow:3 inSection:1],      nil]; 

[tableViewController.tableView insertRowsAtIndexPaths:a withRowAnimation:UITableViewRowAnimationNone]; 

aussi n'a pas déclenché les points d'arrêt. Si vous avez besoin de plus d'informations s'il vous plaît faites le moi savoir. J'espère que je suis juste aveugle et vous pouvez repérer l'erreur.

+0

Ou existe-t-il une autre façon de définir la source de données sur tableView qui remplace ces méthodes et renvoie les valeurs dont elle a besoin? – Akku

+0

Hm, je viens de trouver le membre tableView.dataSource ... la classe 'NSMutableArray' n'implémente pas le protocole 'UITableViewDataSource' ... l'implémentation de ce protocole est-elle une possibilité d'actualiser la vue quand je change la source de données par code? – Akku

Répondre

0

Ok, désolé, mais ma question ne portait pas sur l'erreur que je fait. Le problème était, qu'il me manquait pour définir une référence à ma classe de contrôleur. J'ai parfois rencontré ce problème parfois, venant de langues qui vous donnent NullPointerExceptions. Donc, mon seul conseil pour tout le monde si quelque chose ne fonctionne pas est de vérifier tout ce qui a été initialisé correctement. Désolé d'avoir causé du travail pour quiconque regarde cette question.

2

Peut-être en faisant:

[tableViewController.tableView beginUpdates]; 
[tableViewController.tableView insertRowsAtIndexPaths:a withRowAnimation:UITableViewRowAnimationNone]; 
[tableViewController.tableView endUpdates]; 

De Apple doc:

après endUpdates rendements du tableau vue interroge sa source de données et délégué comme d'habitude pour la ligne et la section données

Je le fais habituellement en utilisant simplement le reloadData quand j'ai un nouveau ligne/section à afficher (en s'assurant que numberOfRow & numberOfSection renvoie le nombre correct d'éléments).

Espérons que cela aide.

Questions connexes