2010-04-23 8 views
0

Vous avez suivi le tutoriel Core Data sur Apple's developer site, et tout est bon jusqu'à ce que je dois ajouter quelque chose à la boutique récupérée. Je reçois cette erreur après une construction réussie et la charge lorsque je tente d'ajouter un nouvel élément à la liste:Récupérer des données de base pour Tableview sur iPhone - Tutoriel me laisse avec des plantages lors de l'ajout d'éléments à une liste

Mettre fin application en raison d'une exception non interceptée « NSInternalInconsistencyException », motif: « mise à jour invalide: numéro incorrect de lignes section 0. Le nombre de lignes contenues dans une section existante après la mise à jour (0) doit être égal au nombre de lignes contenues dans cette section avant la mise à jour (0), plus ou moins le nombre de lignes insérées ou supprimées de cette section (1 inséré, 0 supprimé).

En raison du fait que le téléchargement va par l'amende, et que si je remplace le fetching avec eventList = [[NSMutableArray alloc] init] cela fonctionne comme prévu (sans persistence, bien sûr), je suis porté à croire que le problème vient de ne pas créer le tableau Mutable correctement. Voici la partie problématique du code:

NSFetchRequest *request = [[NSFetchRequest alloc] init]; 
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Event" inManagedObjectContext:managedObjectContext]; 
[request setEntity:entity]; 

NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"creationDate" ascending:NO]; 
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil]; 
[request setSortDescriptors:sortDescriptors]; 
[sortDescriptors release]; 
[sortDescriptor release]; 

NSError *error; 
NSMutableArray *mutableFetchResults = [[managedObjectContext executeFetchRequest:request error:&error] mutableCopy]; 
if (mutableFetchResults = nil) { 
    //Handle the error 
} 

[self setEventList:mutableFetchResults]; 
[mutableFetchResults release]; 
[request release]; 

J'ai essayé commutant les NSArray s dans le deuxième morceau avec NSMutableArray s, mais je reçois toujours la même erreur.

Pour référence, la section de code qui jette l'erreur lorsque je tente d'ajouter une entrée est ici:

[eventList insertObject:event atIndex:0]; 
NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:0]; 
[self.tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade]; 
[self.tableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0] atScrollPosition:UITableViewScrollPositionTop animated:YES]; 

il des erreurs sur l'appel à insertRowsAtIndexPaths.

Merci à l'avance pour toute aide

--edit À ADD--

Je dois souligner que le nombre de lignes est appelé en retournant [eventList count]

Répondre

1

Eh bien, il y a une faute de frappe à - il devrait être ==, bien sûr (qui serait tout foirer à partir de ce point). En supposant que ce n'est pas le problème - garder les informations de base de données et le tableau de tableau en synchronisation peut être difficile (il est difficile de dire exactement quel est le problème de votre code, mais [eventList insertObject:event atIndex:0] semble un coupable). Si vous allez ajouter et supprimer des objets, je vous recommande d'utiliser NSFetchedResultsController à la place - il a son propre ensemble de gotchas, mais cela rend l'ajout et la suppression d'objets du magasin beaucoup moins douloureux.

+0

Je ne peux pas croire que j'ai fait une erreur aussi stupide. Cela l'a réparé. Je vais bientôt migrer vers 'NSFetchedResultsController'. J'essaie juste d'avoir quelques notions de base avant d'aller dans cette direction. Merci pour l'aide. –