Salut à tous !

J'aimerais vous faire part d'un soucis que j'ai eu avec CoreData.
Dans une de mes applis, j'affiche dans une UITableView des offres d'emplois. J'aimerais pouvoir mettre en place une notion d'offre favorite en sauvegardant des offres en local au moyen de Core Data.
J'ai donc un bouton pour sauvegarder une offre dans mes "offres favorites" et un bouton pour la supprimer.

Voici le code de ces 2 fonctions :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
- (void)enregistrerOffre {
    LogicaAppDelegate* delegateApp = (LogicaAppDelegate*)[[UIApplication sharedApplication] delegate];
 
    BOOL isAjoutable = YES;
    for (int i = 0; i < [[delegateApp listeOffresFavorites] count]; ++i) {
        if ([offre isEqualToFavori:[[delegateApp listeOffresFavorites] objectAtIndex:i]]) {
            isAjoutable = NO;
        }
    }
 
    NSString* msg;
    if (isAjoutable) {
        OffreFavorite* offreFav = (OffreFavorite*)[NSEntityDescription insertNewObjectForEntityForName:"OffreFavorite" inManagedObjectContext:self.managedObjectContext];
 
        // On remplir les champs
        offreFav.intitule = offre.intitule;
        offreFav.secteur = offre.secteur;
        offreFav.contenu = offre.contenu;
        offreFav.respoOffre = offre.respoOffre;
        offreFav.telRespoOffre = offre.telRespoOffre;
        offreFav.mailRespoOffre = offre.mailRespoOffre;
        offreFav.datePublication = offre.datePublication;
        offreFav.agence = offre.agence;
 
        NSError *error = nil;
        if (![offreFav.managedObjectContext save:&error]) {
            // Handle error
            NSLog("Unresolved error %, %", error, [error userInfo]);
        }
        msg = "L'offre a bien été enregistré dans vos favoris.\nVous pouvez vous y rendre en cliquant sur le bouton \"Mes offres\"";
        emploisViewController.isReloadable = YES;
 
        [[delegateApp listeOffresFavorites] addObject:offre];
    }
    else {
        msg = "L'offre est déja dans vos favoris";
    }
    UIAlertView* alert = [[[UIAlertView alloc] initWithTitle:"Enregistrement" message:msg delegate:self cancelButtonTitle:"OK" otherButtonTitles:nil] autorelease];
    [alert show];
}
 
- (void)supprimerOffre {
    LogicaAppDelegate* delegateApp = (LogicaAppDelegate*)[[UIApplication sharedApplication] delegate];
 
    // Delete the managed object for the given index path
    OffreFavorite* offreFav = (OffreFavorite*)[[offresFavoritesViewController fetchedResultsController] objectAtIndexPath:indexPath];
    [offreFav.managedObjectContext deleteObject:offreFav];
    // Save the context.
    NSError *error = nil;
    if (![offreFav.managedObjectContext save:&error]) {
        NSLog("Unresolved error %, %", error, [error userInfo]);
        //abort();
    }
    [[delegateApp listeOffresFavorites] removeObjectAtIndex:indexPath.row];
 
    [self.offresFavoritesViewController.offresFavoritesTableView reloadData];    
    UIAlertView* alert = [[[UIAlertView alloc] initWithTitle:"Suppression" message:"L'offre a bien été supprimé de vos favoris" delegate:self cancelButtonTitle:"OK" otherButtonTitles:nil] autorelease];
    [alert show];
    [self.navigationController popViewControllerAnimated:YES];
 
    id <NSFetchedResultsSectionInfo> sectionInfo = [[fetchResults sections] objectAtIndex:0];
    NSLog("core data : %d / liste : %d", [[sectionInfo objects] count], [[delegateApp listeOffresFavorites] count]);
}
L'ajout marche très bien. Ceci dit j'ai un soucis pour la suppression. Après avoir lancé l'application, si j'essaie de supprimer une offre présente dans les offres favorites, ça marche très bien aussi. Par contre, si je rajoute d'abord une offre puis qu'après j'en supprime une, cela m'affiche le message d'erreur suivant :
"Unresolved error (null) (null)". Sans me lever d'exception.
Je suppose que c'est un problème de managedContext mais je n'arrive pas à le résoudre :/

Les autres méthodes nécessaires à Core Data sont implémentées (copier/coller du tutoriel Recipes) dans le delegate de mon appli :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
- (NSManagedObjectContext *) managedObjectContext;
- (NSManagedObjectModel *)managedObjectModel;
- (NSPersistentStoreCoordinator *)persistentStoreCoordinator;
Merci d'avance.

Cordialement,
Sébastien