Frage

Ich brauche Ihre Hilfe bei etwas, da ich damit nicht klar komme.Ich benutze Mantel zusammen mit CoreData in iOS.

Ich habe Beziehungen definiert, die wie folgt aussehen:

Beitrag 1:N Kommentar

Wenn ich die Daten von meinem REST-Dienst abrufe, erstelle ich einen Mantle Object Post, der ein NSMutableArray mit Kommentaren enthält.Das funktioniert einwandfrei.

Das speichere ich dann in Core Data, und da weiß ich nicht, ob ich die Dinge richtig mache.

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

Ich mache das also, um mein Post-Objekt in Core Data zu speichern.Das Kerndatenmodell verfügt über eine Beziehung namens „post_has_comments“, bei der es sich um eine kaskadierende Eins-zu-Viele-Beziehung handelt.Beim Objekt Post habe ich also „posts_has_comments“ -> Kaskadierung, bei meinem Objekt „Comment“ habe ich eine Eins-zu-eins-Beziehung mit „Nullify“.

Afaik, Core Data behandelt dies als NSSet.Was ich jedoch einzufügen versuche, ist ein NSMutableArray, da Mantle sich darum kümmern wird (zumindest hat mir das ein kurzer Blick in die Quelle verraten).

Leider bekomme ich das Objekt von Core Data mit zurück

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

Die Eigenschaft „Kommentare“ zum Post-Objekt ist ein leeres NSSet, und ich erhalte einige Fehlermeldungen, wenn ich das Ding vorher einfüge.Die Fehler, die ich bekomme:

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

Ich stecke fest – Vielleicht übersehe ich hier etwas Großes?

Meine Post-Klasse implementiert die folgenden statischen Methoden:

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

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

+ (NSDictionary *)relationshipModelClassesByPropertyKey {
    return @{
             @"comments" : IHComment.class
             };
}
War es hilfreich?

Lösung

aus der Mantel-Dokumentation:

Mantle macht es einfach, eine einfache Modellschicht für Ihre Kakao- oder Kakao-Touch-Anwendung zu schreiben.

Dies ist einfach eine unbewiesene Erklärung.Ich sehe den Rahmen, sehe ich nicht, wo die Beweise sind.Sie sollten Ihre Objekte erhalten und mit Apple-APIs in Kerndaten einfügen.

generasacodicetagpre.

Das ist alles, was da ist.

Andere Tipps

Eine einfache Problemumgehung besteht darin, eine eigene Property-Setter-Methode zu schreiben und festzustellen, ob der Wert festgelegt ist NSSet dann konvertieren Sie es in NSMutableArray bevor Sie es wieder in Ihr Eigentum zurückbringen ivar.

Zum Beispiel:

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

Ich habe es selbst schon einige Male gemacht und es funktioniert wie ein Zauber!

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top