NSInternalInconsistencyException tout en ajoutant de la ligne de UITableView
J'ai de la difficulté avec l'ajout de nouvelle ligne à mon UITableView. J'ai lu sur des questions similaires sur stackoverflow, ai googlé, ... ne m'a pas aidé.
J'ai vide NSMutableArray *dataForList avec les données de UITableView. Après avoir cliqué sur un écran, je veux ajouter une nouvelle ligne. Cette erreur indique:
* Résiliation d'application en raison de uncaught exception 'NSInternalInconsistencyException', la raison: "tentative d'insérer la ligne 0 dans la section 0, mais il y a seulement 0 lignes dans la section 0, après la mise à jour'
Code:
NSArray *insertIndexPaths = [NSArray arrayWithObject:
[NSIndexPath indexPathForRow:
[self.dataForList count] //is zero now
inSection:0]];
[self.dataForList addObject:newRow];
//[self.dataForList count] is 1 now
[self.unsignedTableView beginUpdates];
[self.unsignedTableView insertRowsAtIndexPaths:insertIndexPaths withRowAnimation:UITableViewRowAnimationNone];
[self.unsignedTableView endUpdates]; //on this line error ocours
Ce qui me manque?
Tous UITableView méthodes
- (void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *) indexPath {}
- (NSInteger) numberOfSectionsInTableView:(UITableView *)tableView {
return 1;
}
- (NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger) section {
return [self.mainController.dataForList count];
}
- (CGFloat) tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *) indexPath{
return 38.0f;
}
- (UITableViewCell *) tableView: (UITableView *) tableView
cellForRowAtIndexPath: (NSIndexPath *) indexPath {
//call render method in view, it works fain
return [self.signUpToTestView renderUnsignedCell:tableView cellForRowAtIndexPath:indexPath];
}
Cela peut être utile: stackoverflow.com/questions/1470898/...
Votre dataForList tableau, ce qui je suppose est la source de données pour votre vue de la table, est en décalage avec l'état de l'affichage de la table.
Oui, je le pense aussi, mais je ne sais pas, où suis-je makeing mystake.
Pourriez-vous montrer l'autre
J'ai ajouté à ma question.
Votre dataForList tableau, ce qui je suppose est la source de données pour votre vue de la table, est en décalage avec l'état de l'affichage de la table.
Oui, je le pense aussi, mais je ne sais pas, où suis-je makeing mystake.
Pourriez-vous montrer l'autre
UITableView
délégué méthodes? Notamment, j'imagine que le problème est dans la numberOfRowsForSection.J'ai ajouté à ma question.
OriginalL'auteur kraag22 | 2012-04-04
Vous devez vous connecter pour publier un commentaire.
changer le
numberOfSection
etnumberOfRowsInSection
selon votre tableau après les clics?et aussi essayer de recharger la table
il n'existe pas de méthode de rechargement sur UITableView
le rechargement de la méthode doit être reloadData.
OriginalL'auteur Anand
Assurez-vous que la vue de la table que vous avez créé a délégué et datasourse ensemble.
Pour exemple:
Je pense que la raison de ce blocage est une source de données et de déléguer des méthodes n'est pas appelée
they don't get called
, - ne pasUITableView
les appeler?OriginalL'auteur iHS
Lors de l'ajout de Lignes avec
insertRowsAtIndexPaths
assurez-vous, votre UITableViewDataSource ailleurs, les méthodes de retour sur le nouveau montant et de nouveaux objets pour la cellule.Vérifier
tableView:numberOfRowsInSection:
ettableView:cellForRowAtIndexPath:
.Sinon, vous obtenez un
NSInternalInconsistencyException
exception.Et si vous essayez d'ajouter toutes vos cellules avec insertRowsAtIndexPaths, arrêtez ce que vous faites et de lire cette.
OriginalL'auteur Jonas Schnelli
J'ai rencontré ce même problème, mais s'est rendu compte qu'il est plus simple pour ajouter les données à la liste, puis de recharger la table, comme suit:
Ensuite, le délégué des méthodes prennent le relais pour le bon nombre de lignes:
OriginalL'auteur James O'Brien
La raison de votre problème est que vous modifiez la source de données et l'interface utilisateur à deux points différents. À la fois votre mise à jour de la source de données ainsi que votre insérez-appel doivent être dans le même début/fin de bloc.
Par conséquent, votre problème peut être résolu simplement en déplaçant le beginUpdates appel devant la addObject appel.
OriginalL'auteur Etan
Voici une idée
Sur l'événement d'appel(lorsque le contenu de la matrice de changement) définir un booléen à true [tableView reloadData]; une tableView:numberOfRowsInSection: réinitialiser les numéros.
Assurez-vous de changer également tableView:cellForRowAtIndexPath: en conséquence
OriginalL'auteur andrei
OriginalL'auteur hayden
J'ai rencontré le même problème et l'ont résolu mon problème, je n'ai pas été initialisation de la NSMutableArray à partir de laquelle ma table est remplie. Je faisais tout droit, mais a oublié que les bits importants.
votre cas peut être différent, et je suggère de prendre un peu de recul et de regarder votre code avant d'essayer de modifier votre code.
Mois plus tard, mais espérons que cette aide !
OriginalL'auteur pnizzle
Une réponse à une vieille question..
Swap ceux et cela devrait fonctionner:
OriginalL'auteur Rick van der Linde
La chose qui m'a fait quand je suis tombé sur ce problème était que mon ReuseIdentifiers n'étaient pas les mêmes. Pour moi, la seule différence, c'est une lettre majuscule. Ne pense pas que votre problème est quelque chose de ridiculement compliqué au premier abord. Aller à travers et de vérifier toutes les choses simples.
Si vous utilisez Storyboard, vous devez littéralement copier et coller la chaîne à partir de la cellule d'attributs dans interface builder en ReuseIdentifier dans votre tableView code.
OriginalL'auteur Louie Bertoncin