Espérons que ce sera une solution rapide. J'ai essayé de comprendre l'erreur que je continue à obtenir. L'erreur est répertoriée ci-dessous et l'appdelagate est en dessous.
Toute aide est appréciée.
Merci
2012-04-12 21: 11: 52.669 Chanda [75100: f803] --- Échec d'assertion dans
-[UITableView _endCellAnimationsWithContext:]
,/SourceCache/UIKit_Sim/UIKit-1914.84/UITableView.m:1037
2012-04-12 21: 11: 52.671 Chanda [75100: f803] --- Arrêt de l'application en raison d'une exception non interceptée 'NSInternalInconsistencyException
' , raison: 'Mise à jour non valide: nombre de lignes non valide dans la section 0. Le nombre de lignes contenues dans une section existante après la mise à jour (2) doit être égal au nombre de lignes contenues dans cette section avant la mise à jour (2), plus ou moins le nombre de lignes insérées ou supprimées de cette section (1 insérée, 0 supprimée) et plus ou moins le nombre de lignes déplacées dans ou hors de cette section (0 déplacées vers l'intérieur, 0 déplacées vers l'extérieur). »
#import "AppDelegate.h"
@implementation AppDelegate
@synthesize window = _window;
@synthesize databaseName,databasePath;
- (BOOL)application: (UIApplication *)application didFinishLaunchingWithOptions: (NSDictionary *)launchOptions {
self.databaseName = @"Customers.db";
NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentDir = [documentPaths objectAtIndex:0];
self.databasePath = [documentDir stringByAppendingPathComponent:self.databaseName];
[self createAndCheckDatabase];
return YES;
}
- (void)createAndCheckDatabase {
BOOL success;
NSFileManager *fileManager = [NSFileManager defaultManager];
success = [fileManager fileExistsAtPath:databasePath];
if (success) return;
NSString *databasePathFromApp = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:self.databaseName];
[fileManager copyItemAtPath:databasePathFromApp toPath:databasePath error:nil];
}
@end
la source
Réponses:
Je ne vois pas la raison pour laquelle vous nous montrez cette partie du code. Votre erreur doit être liée à cette partie de votre code, je suppose
Vous faites probablement une erreur dans l'une de ces méthodes de source de données. Actuellement, il est impossible de dire ce qui ne va pas exactement, mais je suppose que cela pourrait être quelque chose comme: Vous indiquez à la vue de table dans le que
numberOfRowsInSection
vous souhaitez avoir n lignes réservées et configurées et dans lecellForRowAtIndexPath
vous ne gérez alors que n - 1 lignes par exemple.Désolé que cette réponse ne puisse pas être aussi précise qu'elle devrait l'être. Si vous nous montrez votre implémentation de votre source de données, il serait beaucoup plus facile de savoir ce qui se passe.
la source
Comme Sun Tzu dit : il est préférable de gagner sans combattre . Dans mon cas, chaque fois que je vois ce genre de message d'erreur (c'est-à-dire que la différence entre les lignes ajoutées est supprimée, etc.) .. Je ne débogue même rien .. J'évite simplement de faire cet appel supplémentaire où je recharge les lignes etc. c'est 99% de les cas où cette erreur se produit.
C'est un scénario courant où ce bogue se produit: j'ai un
UINavigationController
et il a unUITableView
, quand je clique sur une ligne, il pousse un nouveauUITableView
et ainsi de suite. Cette erreur m'arrive toujours lorsque je saute le dernierUITableview
et que je reviens à l'UITableView
avant, à ce stade, je fais un appel inutile à laloadIt
fonction qui insère essentiellement les lignes et relance le fichierUITableView
.La raison pour laquelle cela se produit est que je place par erreur ma fonction loadIt
viewDidAppear:animated
plutôt queviewDidLoad
.viewDidAppear:animated
est appelé à chaque fois que leUITableView
est affiché,viewDidLoad
n'est appelé qu'une seule fois.la source
Lorsque vous supprimez des lignes, n'oubliez pas qu'il vérifie également les sections lors de la mise à jour, dans:
Si vous souhaitez supprimer une ligne qui est le dernier élément d'une section, vous devez supprimer la section entière à la place (sinon, le nombre de sections peut être erroné et lever cette exception).
la source
N'oubliez pas de mettre à jour votre tableau qui détermine numberOfRowsInSection. Il doit être mis à jour avant de l'animer et de le supprimer
Nous vérifions si le nombre de lignes dans la section est de 1 car nous devrons supprimer la section entière.
Corrigez-moi si quelqu'un peut clarifier cette réponse.
la source
Je mets chaque élément de section dans des tableaux séparés. Mettez-les ensuite dans un autre tableau (arrayWithArray). Ma solution ici pour ce problème:
la source
J'ai eu la même erreur.
J'utilisais les lignes suivantes
pour enregistrer la pointe dans la méthode viewDidLoad, car j'avais une pointe différente qui était également associée à la même classe. Par conséquent, la ligne
retournait nul sauf si j'ai enregistré la plume dans viewDidLoad.
Mon problème était que j'avais oublié de définir l'identifiant dans l'inspecteur d'attributs pour mon fichier "CustomNib.xib" et "CustomNib ~ iphone.xib". (Ou plus précisément, j'ai oublié d'appuyer sur Entrée après avoir tapé l'identifiant dans l'inspecteur d'attributs dans XCode, de sorte que le nouveau nom n'a pas pu être enregistré.)
J'espère que cela t'aides.
la source
Si vous utilisez un
NSFetchedResultsController
comme moi et mettez à jour des données dans un fil d'arrière-plan, n'oubliez pas de commencer et de terminer les mises à jour dans le délégué:la source
J'ai eu la même erreur, qui en essayant avec
[tableView reloadData]
fonctionnait bien. L'erreur était en fait dans la ligneQuand j'ai essayé de vérifier les valeurs d'indexPath, elles n'étaient pas correctes comme requis.
Je l'ai corrigé en modifiant les valeurs dans
indexPathsArray
.J'espère que cela t'aides .
la source
Cela pourrait être l'une des
UITableViewDataSource
méthodes de protocolePour
il doit renvoyer un entier égal à la somme ou au résultat de
-insertRowsAtIndexPaths:withRowAnimation:
et / ou-deleteRowsAtIndexPaths:withRowAnimation
:Pour
il doit renvoyer un entier égal à la somme ou au résultat de
-insertRowsAtIndexPaths:withRowAnimation:
et / ou-deleteSections:withRowAnimation:
la source
J'ai eu le même problème avec une base de données de base. Si vous utilisez plusieurs FRC, il vous suffit de recharger la tableview à l'intérieur de chaque condition dans numberOfSectionsInTableView.
la source
Cela m'est arrivé lors de l'utilisation de Swift et d'un magasin de données soutenu par FRC pour gérer les informations. L'ajout d'une simple vérification à l'opération de suppression pour évaluer la section indexPath.section actuelle m'a permis d'éviter un appel superflu. Je pense que je comprends pourquoi ce problème se produit ... Fondamentalement, je charge un message dans la ligne supérieure chaque fois que mon ensemble de données est vide. Cela crée un problème d'un seul coup car il y a une fausse ligne.
Ma solution
la source
Vérifiez simplement que vous appelez [yourTableView reloadData]; après modifier le tableau de valeurs.
la source