Pergunta

Eu preciso de sua ajuda com uma coisa, como eu não posso colocar minha cabeça em torno deste.Eu estou usando Manto juntamente com CoreData no iOS.

Eu tenho relações definidas que a aparência da seguinte maneira:

Post 1:N Comentário

Quando eu puxar os dados do meu Serviço REST, criar um Manto Objeto de Post que tem um NSMutableArray de Comentários nele.Isso funciona perfeitamente.

Eu, em seguida, guarde este no Core Data, e este é o lugar onde eu não sei se estou fazendo as coisas direito.

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

Então, eu estou fazendo isso para guardar o meu post objeto em Dados do Núcleo.O Núcleo do Modelo de Dados tem uma relação chamada "post_has_comments", que é uma cascata de Um-para-Muitos de relacionamento.Assim, no objeto de Post, eu tenho "posts_has_comments" -> em cascata, sobre o meu objeto de "Comentário" eu tenho uma relação um-para-um relacionamento com "Anular".

Afaik, Núcleo de Dados trata como um NSSet.O que eu estou tentando colocar em um NSMutableArray, porém, como o Manto vai cuidar disso (pelo menos isso é o que uma rápida olhada na sua fonte me disse).

Infelizmente, quando eu recebo o objeto de volta a partir de Dados de base com

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

A propriedade comentários no post objeto é um vazio NSSet, e eu fico bastante alguns erros após inserir a coisa de antemão.Os erros que eu recebo:

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

Eu estou preso - Talvez eu estou faltando alguma coisa enorme aqui?

Meu Post de Classe implementa os seguintes métodos estáticos:

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

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

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

Solução

A partir do Manto documentação:

Manto que torna fácil escrever uma simples camada de modelo para o seu Cacau ou de Cacau Toque aplicação.

Isso é simplesmente uma declaração não comprovada.Olhando para o quadro, eu não vejo onde a prova.Você deve obter seus objetos, e inseri-los no Núcleo de Dados usando da Apple APIs.

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;
}

Isso é tudo que existe para ela.

Outras dicas

Uma solução simples é escrever sua própria propriedade método setter e se o valor que está sendo definido é NSSet em seguida, convertê-lo para NSMutableArray antes de defini-la de volta para sua propriedade ivar.

Por exemplo:

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

Eu já fiz isso algumas vezes e ele funciona como um encanto!

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top