Domanda

Ho bisogno del tuo aiuto con qualcosa, perché non riesco a farti prendere la testa. Sto usando mantle insieme a Coredata in ios.

Ho relazioni definite che sembrano segue:

Posta 1: n Commento

Quando tiro i dati dal mio servizio di riposo, creo un post oggetto del mantello che ha un nsmutablearay di commenti in esso. Questo funziona impeccabilmente.

Poi archiviarlo in dati principali, ed è qui che non so se sto facendo le cose giuste.

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

Quindi sto facendo questo per memorizzare il mio oggetto post in dati principali. Il modello di dati chiave ha una relazione chiamata "Post_has_Comments" che è una relazione a cascata una-a-molti. Quindi, sulla posta dell'oggetto ho "post_has_comments" -> cascading, sul mio oggetto "commento" Ho una relazione one-to-one con "annullamento".

AFAIK, I dati chiave trattano questo come NSET. Quello che sto cercando di inserire è un nsmutablearray però, poiché il mantello si prenderà cura di questo (almeno questo è quello che un aspetto veloce nella sua fonte mi ha detto).

Sfortunatamente, quando restituisco l'oggetto dai dati chiave con

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

I commenti della proprietà sull'oggetto Post sono un NSET vuoto, e ottengo alcuni errori dopo aver inserito la cosa in anticipo. Gli errori che ottengo:

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

Sono bloccato - forse mi manca qualcosa di enorme qui?

My Post Class implementa i seguenti metodi statici:

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

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

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

È stato utile?

Soluzione

Dalla documentazione del mantello:

.

Mantle semplifica la scrittura di un semplice livello di modello per il tuo cacao o l'applicazione touch cacao.

Questa è semplicemente un'istruzione non provata.Guardando il framework, non vedo dove si trova l'evidenza.Dovresti ottenere i tuoi oggetti e inserirli in dati principali usando le API di 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;
}
.

Questo è tutto ciò che ce n'è.

Altri suggerimenti

Una semplice soluzione alternativa è quella di scrivere il proprio metodo di proprietà di proprietà e se il valore che è impostato è generatoDicetagCode, quindi convertilo in NSSet prima di riportarlo alla proprietà NSMutableArray.

Ad esempio:

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

L'ho fatto da solo un paio di volte e funziona come un fascino!

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top