J'ai un problème avec la récupération d'un objet après avoir ajouté une relation. La première fois que je récupère la catégorie, toujours trouvée, alors quand j'ai ajouté à la relation, les catégories suivantes ne sont pas trouvées.Je n'ai pas trouvé d'objet dans coredata après avoir ajouté à une relation
La relation est un Many-To-Many
.
Exemple:
- Fetch catégorie avec
categoryId = 10
- Objets trouvés catégorie
- Ajouté à la relation d'objet parent
- Objet suivant
Si plusieurs catégories a la même
id
,categoryId = 10
, introuvableNSManagedObjectContext *private = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType]; [private setParentContext:self.model.context]; __block NSError *error = nil; [private performBlockAndWait:^{ GPDeal *deal = [EKManagedObjectMapper objectFromExternalRepresentation:dic withMapping:[GPDeal objectMapping] inManagedObjectContext:private]; for (NSDictionary *dic in responseObject[@"response"]) { GPCategory *category; //The first time always found if ((category = [GPCategory MR_findFirstByAttribute:@"catId" withValue:dic[@"mainAttribute"] inContext:private])) { NSLog(@"Found"); [category addDealsObject:deal]; } else { NSLog(@"Not Found"); } } }]; NSError *PrivateError = nil; if (![private save:&PrivateError]) { NSLog(@"Unresolved error %@, %@", PrivateError, [PrivateError userInfo]); abort(); } if (!error) { //Save on main moc [self.model saveWithErrorBlock:^(BOOL success, NSError *error) { if (!success) { NSLog(@"Error saving context: %@\n%@", [error localizedDescription], [error userInfo]); } }]; } else { NSLog(@"Error saving context: %@\n%@", [error localizedDescription], [error userInfo]); }
EDIT:
résolu, je suppose que mon problème était que j'ai oublié de sauvegarder le contexte principal à la fin de chaque itération.
NSManagedObjectContext *backgroundMOC = [self.model backgroundMOC:self.model.context];
[backgroundMOC performBlockAndWait:^{
for (NSDictionary *dic in responseObject[@"response"]) {
GPDeal *deal = [EKManagedObjectMapper objectFromExternalRepresentation:dic withMapping:[GPDeal objectMapping] inManagedObjectContext:backgroundMOC];
GPCategory *category;
if ((category = [GPCategory MR_findFirstByAttribute:@"catId" withValue:dic[@"mainAttribute"] inContext:backgroundMOC])) {
NSLog(@"Found with mainAttribute %@", dic[@"mainAttribute"]);
[deal addDealCategoryObject:category];
}
if([backgroundMOC hasChanges]) {
NSError * error;
[backgroundMOC save:&error];
[self.model.context performBlockAndWait:^{
if([self.model.context hasChanges]) {
NSError * error;
[self.model.context save:&error];
}
}];
}
}
}];
Dans quel contexte l'objet 'deal' appartient-il? Il semble que ce soit un contexte différent de 'private'. Vous ne devez pas définir de relations entre des objets dans des contextes différents. Passez le managedObjectID puis récupérez-le dans le contexte 'private' en utilisant' objectWithID'. – pbasdf
J'ai déjà vérifié, mais 'deal' est créé dans le contexte privé – brunobasas
donc votre problème est seulement avec caregoryId = 10? 1ère fois que vous avez 10 dans dic [@ "mainAttribute"] trouvez-vous la catégorie et la 2ème fois non? Le fait que le problème ne provienne pas de MR_findFirstByAttribute m'indique que le problème pourrait être la chaîne contenant l'entier dans dic [@ "mainAttribute"]. pourriez-vous NSLog (@ "ID: -% @ -") afin de vérifier que l'ID n'a pas d'espaces avant ou après? – Mikael