Pergunta

Eu tenho um grande conjunto de dados (cerca de 3.500 objetos) que retorna de um servidor remoto via HTTP.Atualmente os dados estão sendo apresentados em um NSCollectionView.Um aspecto dos dados é um pacote de caminhos para o servidor para uma pequena imagem que representa os dados (pense em miniatura para simplificar).

As ligações funcionam de maneira fantástica para os dados que já foram retornados, e é fácil vincular a imagem por meio de uma ligação valueurl.No entanto, a interface do usuário é muito lenta ao percorrer o conjunto de dados - o que me faz pensar que o NSCollectionView está recuperando todos os dados da imagem em vez de apenas os dados da imagem usados ​​para exibir as imagens atualmente visíveis.

Fiquei com a impressão de que os controles do Cocoa eram inteligentes o suficiente para recuperar apenas os dados das informações que realmente estão sendo enviadas para a interface do usuário por meio do carregamento lento.Este certamente parece ser o caso NSTableView - mas posso estar equivocado nesse pensamento.

Deveria valueurl vinculativo agir preguiçosamente e, além disso, deveria agir preguiçosamente em um NSCollectionView?

Eu poderia criar um mecanismo de cache (na verdade, já tenho algo assim para outro aplicativo - veja meu post aqui se você estiver interessado Preenchendo NSImage com dados de um NSURLConnection assíncrono), mas eu realmente não quero seguir esse caminho se não for necessário para esta implementação específica, pois o usuário pode alterar os conjuntos de dados com frequência e pode querer apenas pequenos subconjuntos de dados.

Alguma abordagem sugerida?

Obrigado!

Atualizar

Após mais alguns testes, parece que o problema surge porque uma ação de rolagem pelo conjunto de dados faz com que cada imagem seja solicitada ao servidor.Depois que todas as imagens forem repassadas no conjunto de dados, a resposta é muito rápida.

Então pergunta...existe alguma maneira de desativar a busca de valueurl durante a rolagem e ativá-la novamente quando a rolagem terminar?

Foi útil?

Solução

Minha solução é usar um mecanismo de cache personalizado como o que já uso para outro aplicativo.O problema se manifesta porque, à medida que você rola pelas imagens que ainda não foram baixadas, o controle é acionado para buscar os arquivos ainda não baixados.

Depois de baixadas, as imagens ficam disponíveis localmente e, portanto, a velocidade de rolagem se normaliza.A solução é verificar se a imagem está disponível localmente e apresentar um gráfico alternativo do pacote de aplicativos enquanto a imagem está sendo baixada em segundo plano.Após o download da imagem, atualize o modelo com a imagem substituindo a imagem stub que veio do pacote.

Isso deixa a IU em um estado muito responsivo, deixa o usuário com a capacidade de interagir e permite um gerenciamento de plano de fundo personalizado das imagens.

É claro que teria sido bom se Cocoa me contasse tudo isso, mas então o que me restaria fazer?:-)

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