Je suis nouvelle Base de données et encore de comprendre les écrous et boulons, et cette erreur a été mise sur écoute moi pendant des heures et je ne peux pas l'air de trouver une solution. Toute aide est grandement appréciée.
Le problème, c'est comme ça
J'ai deux points de vue qui extraire des données à partir du serveur et la mise à Jour de l'INTERFACE utilisateur. J'ai mis en place le flux de cette façon
vue1 -> Envoyer HTTP Req. à partir du Serveur - Recevoir de Rappel -> Enregistrer de Données De Coredata -> Lire à Partir de Base de Données et l'affichage sur l'INTERFACE utilisateur (rappel et l'enregistrement/la lecture de Coredata arriver dans ViewController)
vue2 -> Envoyer HTTP Req. à partir du Serveur - Recevoir de Rappel -> Enregistrer de Données De Coredata -> Lire à Partir de Base de Données et l'affichage sur l'INTERFACE utilisateur (rappel et l'enregistrement/la lecture de Coredata arriver dans ViewController)
Vue 2 répète ce processus toutes les 3 secondes, c'est un rafraîchissement automatique de l'écran.
Le problème est que chaque fois que j'essaie de basculer entre les vues 1 et 2, très vite, il bloque l'application avec l'erreur ci-dessus. Si j'attends quelques secondes sur chaque vue (attendre que les données soient récupérées à partir du serveur), il fonctionne très bien. Suis-je en train de faire quelque chose de mal, que dois-je modifier?
- (void) refreshData {
[super refreshData];
[[UserDataFactory sharedSingleton] refreshLoggedInUserDataAndRespondTo:self user:self.user];
}
- (BOOL) refreshDataCallback:(QExtendedHTTPOperation*)responseOperation {
[self saveToCoreData: responseOperation.responseArray];
NSMutableArray *tmp = [[NSMutableArray alloc] initWithArray:[self readFromCoreData]];
[self setData: tmp];
[tmp release];
[self.tableView reloadData];
return YES;
}
- (void) saveToCoreData:(NSArray *) responseArray{
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"CoreView1" inManagedObjectContext:self.managedObjectContext];
[fetchRequest setEntity:entity];
[fetchRequest setReturnsObjectsAsFaults:NO];
NSError *error;
NSArray *items = [self.managedObjectContext executeFetchRequest:fetchRequest error:&error];
[fetchRequest release];
for (NSManagedObject *managedObject in items) {
[self.managedObjectContext deleteObject:managedObject];
}
for (int i=0; i<[responseArray count]; i++) {
CoreView1 *coreView1_ = [NSEntityDescription insertNewObjectForEntityForName:@"CoreView1" inManagedObjectContext:self.managedObjectContext];
coreView_.id = [[responseArray objectAtIndex:i] id];
[self.managedObjectContext insertObject:coreView1_];
}
[self saveContext:self.managedObjectContext];
}
- (NSArray *) readFromCoreData{
NSEntityDescription *entity = [NSEntityDescription entityForName:@"CoreView1" inManagedObjectContext:self.managedObjectContext];
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
[fetchRequest setEntity:entity];
[fetchRequest setReturnsObjectsAsFaults:NO];
NSError *error;
NSMutableArray *fetchedObjects = [[self.managedObjectContext executeFetchRequest:fetchRequest error:&error] mutableCopy];
[fetchRequest release];
return [fetchedObjects autorelease];
}
C'est l'exemple de code que j'utilise, même Vue2 a la même rappels et suit le même flux.
Edit 1 J'ai oublié de mentionner plus tôt, j'ai toujours l'erreur en saveToCoreData méthode. Aussi, plus qu'une chose à noter est que Si je supprime le code pour supprimer des objets tout fonctionne très bien (j'ai besoin de supprimer toutes les données existantes à partir de la table avant de me sauver la mise à jour des données). Pas sûr de ce qui se passe si.