NSFetchedResultScontroller não mostra atualizações de outros contextos
-
23-09-2019 - |
Pergunta
Eu tenho um NSFetchedResultSController configurado para preencher uma View Uable, com base no meu 'principal' nsanGageObjectContext.
Em um cronômetro, adiciono continuamente objetos a um NSmanAgedObjectContext separado, mas que compartilha seu NSPERSISTANTStoreCoordinator com o contexto principal.
Eu posso ver as notificações NSMANAGEDOBJETCONTEXTWILLSAVENOTIFICAÇÃO sendo enviadas e, quando saí de reiniciar o aplicativo, tenho todos os dados da execução anterior. No entanto, nenhuma atualização acontece com o atual NSFetchEdResultScontroller.
Eu criei um projeto de teste e o coloquei aqui.
(Inicialmente, pensei que isso estava acontecendo por haver vários threads em jogo; no entanto, isso acontece quando tudo é feito em um tópico).
Pergunta original
Eu tenho um NSFetchedResultSController configurado para preencher uma View Uable, com base no meu 'principal' nsanGageObJetContext.
Em um tópico em segundo plano, faço o download e importo vários objetos para um NSmanAgedObjectContext separado, mas que compartilha seu NSPERSISTANTSOREcoordinator com o contexto do thread principal.
Estou registrado para receber notificações NSMANAGEDOBJETCONTEXTWILLSAVENOTIFICATIVA. Quando os pego, encaminhe -os para o tópico principal e os passo para o meu contexto principal.
Usando o depurador, posso assistir isso e verificar se eles estão, de fato, adicionando objetos ao contexto. No entanto, meu nsfetchedResultScontroller não está atualizando. Se eu fizer tudo isso no tópico principal, ele funciona. Chamando -PerformFetch: no controlador fará com que ele seja atualizado, então eu sei que não é que não esteja vendo os novos objetos.
A maior parte disso é o código da caldeira, basta dividir -se em encadeamentos diferentes.
Solução
Você está recebendo alguma chamada de delegados do NSFetchedResultScontroller? Caso contrário, isso pode ser um bug com o próprio NSFetchedResultScontroller. Eu recomendaria criar um projeto de teste que possa confirmar/negar esse problema isoladamente.
Se você pode duplicar isso isoladamente;
- Eu adoraria ver isso :)
- Arquive um radar com a Apple.
Depois de revisar o código, a resposta é alterar seu observador de notificação de NSManagedObjectContextWillSaveNotification
para NSManagedObjectContextDidSaveNotification
. Você estava enviando a mensagem apenas antes da O salvamento ocorreu que estava causando seus problemas.