Question

J'ai besoin de votre aide pour quelque chose, car je n'arrive pas à comprendre cela.j'utilise Manteau avec CoreData dans iOS.

J'ai des relations définies comme suit :

Message 1:N Commentaire

Lorsque j'extrait les données de mon service REST, je crée une publication d'objet Mantle contenant un NSMutableArray de commentaires.Cela fonctionne parfaitement.

Je stocke ensuite cela dans Core Data, et c'est là que je ne sais pas si je fais les choses correctement.

[MTLManagedObjectAdapter managedObjectFromModel:post insertingIntoContext:[self getManagedObjectContext] error:&error];

Je fais donc cela pour stocker mon objet de publication dans Core Data.Le modèle de données de base a une relation appelée « post_has_comments » qui est une relation un-à-plusieurs en cascade.Donc sur l'objet Post j'ai "posts_has_comments" -> en cascade, sur mon objet "Comment" j'ai une relation individuelle avec "Nullify".

Autant que je sache, Core Data traite cela comme un NSSet.Ce que j'essaie d'installer, c'est un NSMutableArray, car Mantle s'en chargera (du moins c'est ce qu'un rapide coup d'œil dans sa source m'a dit).

Malheureusement, lorsque je récupère l'objet de Core Data avec

Post* post = [MTLManagedObjectAdapter modelOfClass:Post.class fromManagedObject:[[self fetchedResultsController] objectAtIndexPath:indexPath] error:nil];

Les commentaires de propriété sur l'objet de publication sont un NSSet vide, et j'obtiens pas mal d'erreurs lors de l'insertion préalable de l'objet.Les erreurs que j'obtiens :

Core Data: annotation: repairing missing delete propagation for to-many relationship post_has_comments on object [...]

Je suis coincé. Peut-être qu'il me manque quelque chose d'énorme ici ?

My Post Class implémente les méthodes statiques suivantes :

+ (NSDictionary *)managedObjectKeysByPropertyKey {
return @{
         @"post_id" : @"id",
         @"comments" : @"post_has_comments"
         };
}

+ (NSDictionary *)JSONKeyPathsByPropertyKey {
    return @{
             @"post_id" : @"id",
             };
}

+ (NSDictionary *)relationshipModelClassesByPropertyKey {
    return @{
             @"comments" : IHComment.class
             };
}
Était-ce utile?

La solution

de la documentation du manteau:

Mantle facilite l'écriture d'une couche de modèle simple pour votre application de cacao ou de cacao tactile.

Ceci est simplement une déclaration non prouvée.En regardant le cadre, je ne vois pas où se trouve la preuve.Vous devez obtenir vos objets et les insérer dans des données de base à l'aide des API de Apple.

Post *cdPost = [NSEntityDescription insertNewObjectForEntityForName:@"Post"
   inManagedObjectContext:self.managedObjectContext];
// configure the cdPost object with the data from the web service
for (id commentObject in commentArrayFromPostObject) {
   Comment *cdComment = 
       [NSEntityDescription insertNewObjectForEntityForName:@"Comment"
       inManagedObjectContext:self.managedObjectContext];
   // configure the cdComment object with the data from the web service
   cdComment.post = cdPost;
}

C'est tout ce qu'il y a.

Autres conseils

Une solution simple consiste à écrire votre propre méthode de définition de propriété et si la valeur définie est NSSet puis convertissez-le en NSMutableArray avant de le remettre dans votre propriété ivar.

Par exemple:

- (void)setComments:(NSMutableArray *)comments {
    if ([comments isKindOfClass:NSSet.class]) {
        _comments = [NSMutableArray arrayWithArray:[((NSSet *)comments) allObjects]];
    } else {
        _comments = comments;
    }
}

Je l'ai fait moi-même plusieurs fois et ça fonctionne à merveille !

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top