Impedindo uma referência NSManagedObject atualizando um UITableViewCell

Informações de fundo:

Temos um aplicativo que preenche visualizações de tabela do Core Data. Este aplicativo possui um mecanismo de sincronização implementado que atualiza os dados do CoreData em um contexto em segundo plano e é automaticamente mesclado novamente ao contexto principal quando terminar.

Para manter o exemplo simples, vamos assumir umaMessage e umComment 'entidade' onde uma Mensagem pode ter zero ou mais Comentários. SubclassificamosNSManagedObjects para todas as nossas entidades e, portanto, temos uma propriedade chamadacomments (que é do tipoSet<Comment>) no nossoMessage classe.

Um requisito do aplicativo é que uma visualização possa atualize os dados na tela ao navegar para uma nova tela. Isso significa que, quando você estiver na tela e qualquer atualização de dados em segundo plano, os dados visíveis permanecerão osmesmo.

NossoMessageViewcontroller tem uma propriedade privadamessage que é preenchido emviewDidLoad. DentrocellForRowAt indexPath nós usamoscell.message = message.comments[indexPath.row].

Problema:

O problema é que, se atualizamos um comentário em nosso contexto de segundo plano, que é mesclado de volta ao contexto principal, 'rolando' para cima e para baixo na visualização de tabela (acionando ocellForRowAt indexPath novamente) atualizará a célula com o texto atualizado.

Isso faz sentido porque nossamessage A propriedade é uma referência que representa os dados em nossos CoreData.

Pergunta, questão:

Como evito omessage variável da atualização? Ou, de maneira diferente: como posso manter um 'instantâneo' de um objeto de mensagem (e seus relacionamentos) ao carregar o controlador de exibição?

Solução?

A única solução que acho que poderia funcionar é criar uma estrutura com as mesmas propriedades e preenchê-la ao carregar a exibição. Eu realmente não gosto dessa abordagem porque nosso modelo é muito mais complicado do que issoMessage exemplo e tem muitos relacionamentos, recursão etc.

questionAnswers(1)

yourAnswerToTheQuestion