O Core Data não pôde atender a falha para o objeto após a obtenção dePermanentIDs
Estou recebendo dados de um servidor da web, processando-o em um contexto de plano de fundo privado filho chamadobackgroundMOC
. É uma criança de ummainMOC
que está ligado à interface do usuário principal, para salvar nobackgroundMOC
aciona as alterações da interface do usuário. omainMOC
é filho de ummasterMOC
que é uma fila de segundo plano privada vinculada ao armazenamento persistente, portanto, salvar no mestre salva no disco.
O que eu faço agora é receber dados, criar novos objetosbackgroundMOC
e depois salvebackgroundMOC
(para que as atualizações da interface do usuário), salvarmainMOC
, (para que eu possa quase salvar em disco), e salvarmasterMOC
(para que eu possa finalmente gravar no disco). O problema é que quando o objeto aparece na interface do usuário por meio de um controlador de resultados buscados,objectId
ainda é temporário.
Isso causa problemas com problemas de linha duplicados, onde se eu receber os mesmos dados do servidor (por acidente),backgroundMOC
não sabe que este objeto já existe porque não foi atribuído um id permanente, então ele cria outro objeto. Quando eu reiniciar o aplicativo, o objeto duplicado desaparece, então eu sei que é apenas um problema com o mapeamento de id.
Então eu pensei que poderia tentar
[backgroundMOC obtainPermanentIDsForObjects:backgroundMOC.registeredObjects.allObjects error:nil];
antes de salvar a todos (eu tentei depois de salvar também). No entanto, por algum motivo, chamar essa linha gera uma exceção:
CoreData não pôde cumprir uma falha para ...
Se você tiver alguma sugestão que possa me levar na direção certa, por favor, compartilhe. obrigado
Editar: Ok, então inicialmente eu estava chamando getPermanentIDsForObjects no backgroundMOC, que é filho do mainMOC, que é filho do masterMOC. Eu troquei para obter os ids no mainMOC, e resolveu todos os meus problemas (por enquanto). Eu nunca deveria chamar getPermIds no contexto infantil?