Pergunta

Então aqui está o que eu tenho:

  • Uma NSTableView com uma fonte de dados NSMutableArray
  • FSEvents monitorando uma pasta que contém o arquivo que contém os dados para a exibição de tabela (Utilizando SCEvents para Objective-C bondade abstração)
  • Os FSEvents desencadeia a mesma função que um botão de recarga na interface do usuário faz. Essa função atualiza a exibição de tabela com uma nova fonte de dados com base no conteúdo do referido ficheiro de via setDataSource:.

E aqui está o que acontece:

  • Se eu fizer uma alteração no arquivo, o FSEvent é acionado e o método de atualização é chamada.
  • A matriz que a exibição de tabela deve ser aceitar de fato não incluem as mudanças que provocaram a FSEvent.
  • setDataSource: é enviado para o NSTableView com a fonte de dados correto.
  • As alterações não aparecem na exibição de tabela!

Mas então:

  • Se eu apertar o botão de atualização, o que desencadeia o mesmo método exato como o FSEvent, a exibição de tabela é atualizada com os novos dados.

Eu também tentei substituir o FSEvent com um NSNotification (NSApplicationDidBecomeActiveNotification), mas acontece a mesma coisa.

Alguém tem alguma idéia de por que isso está acontecendo?

Edit: Para esclarecimento, o jist da minha pergunta é esta: Por que o meu recarga NSTableView como deveria quando provocado por pressionar um botão, mas não quando acionado por um FSEvent ou um NSNotification

?

Edit: Graças a diciu , I 'já descobri que na verdade todas as minhas referências de interface do usuário apontam para 0x0 quando acionado pelo evento, mas depois têm endereços válidos quando acionado pelo clique de botão. Esses objetos são todos declarados no IB, por isso não há instanciação ou alocação para eles acontecendo no meu código. Então, minha pergunta agora é: o que posso fazer para parar esses ponteiros de apontar a zero

Foi útil?

Solução

sons como quando você se inscrever para o evento / notificação, você está passando em uma instância diferente de sua classe controller.

Outras dicas

Chamamos reloadData em NSTableView quando temos novos dados para adicionar / remover a tabela.

Isto pode ajudar, para forçar o NSTableView para redesenhar.

Eu não tenho certeza se é isso que o seu perguntando embora. A formulação da sua pergunta é meio confuso, você indicar uma série de eventos, mas nunca uma verdadeira questão.

Você já tentou ligar para o método de sua FSEvent em uma segunda passagem do run-loop?

[myObject performSelector:@selector(reloadAction:) withObject:nil afterDelay:0.0];

Você está definindo um NSArray diretamente como fonte de dados da exibição de tabela?

Isso não é como funciona NSTableView. A fonte de dados deve ser um objeto que está em conformidade com NSTableDataSource . NSArray não. Você escreve a fonte de dados a si mesmo; ele provavelmente será o mesmo objeto que você tem atualmente setDataSource: chamando.

A outra maneira seria usar ligações.

Será que referência a exibição de tabela no âmbito do seu método de atualização não é válido?

i. você tem certeza que não está chamando [nil reloadData], que não produz quaisquer erros? A sua referência à sua exibição de tabela pode ser nulo no código de atualização Se você é pô-la diante awakeFromNib ou em algumas outras circunstâncias.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top