Objetos retirados NSArrayController estadia em mesa até clicado
-
19-09-2019 - |
Pergunta
Eu tenho um NSArrayController que é obrigado a managedObjectContext de AppDelegate do meu aplicativo. Ele atua como uma fila de download. Os itens são adicionados à NSArrayController programaticamente
I têm uma tabela que mostra dois dos campos nesta, cada uma coluna com o seu valor individualmente ligado ao referido NSArrayController. Quando um novo download é iniciado ele é removido por meio de programação do NSArrayController.
Eu adicionei um botão para remover de downloads da fila antes de começar, o botão é obrigado a remover do NSArrayController:. Ação que deve remover o item selecionado na tabela
Meu problema é que ao clicar no botão Remover o item selecionado não são removidos da mesa, ele permanece lá até clicar outra entrada na tabela. Selecionando a linha onde o item foi faz com que seja selecionado enquanto o botão do mouse é pressionado, como se ele ainda está lá, mas sem valores.
No console aparecerá a seguinte quando o botão Remover é clicado:
-[NSCFDictionary _setUnprocessedDeletion__:]: unrecognized selector sent to instance 0x2000f2220
Se eu remover itens da tabela programaticamente usando
[[downloadsArray content] removeObjectAtIndex:0];
[downloadsTable reloadData];
[downloadsTable deselectAll:nil];
parece funcionar bem, exceto eu ainda obter o item invisível deixado para trás que podem ser selecionados e permanece selecionado apenas quando o botão do mouse está para baixo.
Eu tenho ligado atributo habilitado do botão Remover para CanRemove do NSArrayController e isso funciona corretamente.
Eu tenho um rótulo que mostra o número de itens na fila, este é obrigado a NSArrayController, arrangedObjects, @count. Isso funciona corretamente quando a adição de itens, mas não quando removê-los.
Algumas ideias sobre o que estou fazendo de errado seria muito apreciado.
Solução
Eu tive o mesmo problema quando eu tentei usar um NSFetchRequest com NSManagedObjectIDResultType, e depois tentou excluir os resultados com -. [NSManagedObjectContext ExcluirObjeto:]
Solução:. Uso não faça NSManagedObjectIDResultType para um NSFetchRequest se você pretende excluir os objetos devolvidos
Outras dicas
Eu só tinha um problema semelhante. Acontece que _setUnprocessedDeletion__: é um método definido para NSManagedObject, e, aparentemente, a sua mensagem é enviada a um objecto quando este é removido a partir de um controlador de matriz, que está configurado para o modo de entidade. Esse foi o meu problema; após um dia de heavy remodelação acabei com um conjunto de controlador de matriz para o modo de Entidade, cujo conteúdo foi obrigado a uma matriz de objetos regulares em vez de objetos gerenciados. Um destes erros ocorreu sempre que um objecto removido. Olhe para o contentArray do seu controlador de matriz.