2010-07-11 5 views
3


Je travaille sur une application ipad qui utilise des coredata. Il télécharge des informations sur une base de données qui est sur le web, et les enregistre dans coredata. L'application est basée sur une vue partagée. Mon problème était de faire le téléchargement et l'enregistrement des données en arrière-plan.
Voici comment j'ai fait:
- J'ai créé un NSOperation, qui fait le téléchargement et l'enregistrement des données.
- Ce NSOperation utiliser un autre NSManagedObjectContext que le contexte du appDelegate, retour par cette fonction, qui est dans le appDelegate:Comment synchroniser deux NSManagedObjectContext

(NSManagedObjectContext*)newContextToMainStore { 
    NSPersistentStoreCoordinator *coord = nil; 
    coord = [self persistentStoreCoordinator]; 
    NSManagedObjectContext *moc = [[NSManagedObjectContext alloc] init]; 
    [moc setPersistentStoreCoordinator:coord]; 
    return [moc autorelease]; 
} 

- J'ai eu un observateur dans le NSOperation, qui appellera cette fonction dans le appDelegate quand je sauve le contexte, de modifier le contexte du délégué aussi:

- (void)mergeChangesFromContextSaveNotification:(NSNotification*)notification { 
    [[self managedObjectContext]mergeChangesFromContextDidSaveNotification:notification]; 
} 

Mais j'ai un problème, la synchronisation ne fonctionne pas, parce que les données sur le RootViewController (qui est un UITableViewController), qui ont un NSManagedObjectContext initialisé avec le contexte de e appDelegate et utilise comme source de données un NSFetchedResultsController, n'actualise pas automatiquement les informations, comme il doit normalement le faire.
Alors je vous demande:
Qu'est-ce que j'ai fait de mal? Est-ce le bon moyen d'utiliser deux contextes différents et de les synchroniser?

Répondre

1

Ce que vous avez ici semble correct. Vous voulez vous assurer que vous implémentez les méthodes NSFetchedResultControllerDelegate dans le rootViewController afin que les modifications apparaissent dans l'interface utilisateur.

+0

Merci pour votre réponse. NSFetchedResultControllerDelegate est implémenté. En fait, mon système fonctionne quand je le lance dans appDelegate, mais pas dans un viewController appelé plus tard. Je cherche mon erreur, je pense que c'est juste une petite erreur ... – zocario

+0

Salut encore, je suis confus, j'ai trouvé mon erreur: j'ai fait deux sous-classes NSOperation, et dans la seconde, j'ai oublié d'ajouter l'observateur pour faire la modification dans les deux contextes. Merci de votre attention! – zocario

Questions connexes