Atualizando o NStableView em uma instância do NScollectionViewItem
-
21-09-2019 - |
Pergunta
Na minha configuração, tenho uma visão ncollection de volumes conectados ao Mac. Para a visualização do NSCOLLECTIONVIEWItem, tenho um NSBox com um NSTableView no interior da lista o conteúdo desse volume.
Meu problema vem ao tentar adicionar/remover itens ao NSTableView. O NSBox parece ser inicializado uma vez, então existe apenas um NSTABLEVIEW. Isso significa que, quando quero atualizar os dados dentro do NStableView, não posso chamar o Reloaddata em um iboutlet e enviá -lo por todas as tabelas.
Se eu criar um iboutlet em uma subclasse do NSBox, é nulo para a instância, por isso não posso chamá -lo através disso.
O mais próximo que cheguei é envolver um @Try @catch em torno do código que retorna o objeto em uma linha em uma coluna, ocorre uma exceção porque esse item não existe mais, para que eu possa pegar a tabela e chamar Reloaddata, que parece Atualize esse NStableView específico.
O problema é que, se o item removido estiver no final da tabela ou se um item for adicionado, a exceção não ocorrerá, pois poderá ver todos os itens existentes.
Alguém já teve alguma experiência com um NSTABLEVIEW em uma visão de NSCollectionViewItem? Como você atualizou as tabelas?
Solução
Coloque o NSBox (com seu NSTableView) em sua própria ponta. Cada vez que você cria um novo item de exibição de coleção, carregue a ponta, defina esse NSBox como a visualização do item da coleção e libere o NSBox.
Quanto à alimentação das vistas da mesa, a maneira mais fácil é provavelmente as ligações. Ligue cada coluna da exibição da tabela a uma propriedade diferente do objeto modelo que o item de exibição da coleção representa. Você provavelmente vai querer passar por um controlador de matriz, é claro, o que significa ter um desses itens de visualização por coleção e adicioná -los a uma matriz, que você lançará dealloc
.