Question

I ai un grand ensemble de données (quelques 3500 objets) qui retourne à partir d'un serveur distant via HTTP. À l'heure actuelle les données sont présentées dans un NSCollectionView. Un aspect des données est un pack de chemin d'accès au serveur pour une petite image qui représente les données (pensez miniature pour la simplicité).

Manchettes fonctionne fantastiquement pour les données qui sont déjà retournées, et la liaison de l'image via un valueurl de liaison est facile à faire. Cependant, l'interface utilisateur est très lent lorsque vous faites défiler l'ensemble de données -. Qui me fait penser que le NSCollectionView récupère toutes les données d'image au lieu de seulement les données d'image utilisées pour afficher les images actuellement visibles

J'avais l'impression que les contrôles Cocoa étaient assez intelligents pour récupérer uniquement les données pour les informations qui sont réellement sortie à l'interface utilisateur à travers le chargement paresseux. Cela semble bien être le cas avec NSTableView -. Mais je pourrais être erronée à cette pensée

doit valueurl acte contraignant paresseusement et, en outre, doit-elle agir paresseusement dans un NSCollectionView?

Je pourrais créer un mécanisme de mise en cache (en fait, je l'ai déjà une telle chose en place pour une autre application - voir mon post ici si vous êtes intéressé Peupler NSImage avec des données à partir d'un NSURLConnection asynchrone) mais je ne veux vraiment pas aller dans cette voie si je n'ai pas pour cette spécifique la mise en œuvre que l'utilisateur pourrait changer ensembles souvent et ne peut vouloir données de petits sous-ensembles de données.

Les approches proposées?

Merci!

Mise à jour

Après un peu plus le test, il semble que le problème se pose parce qu'une action de défilement à travers l'ensemble de données provoque chaque image à demander à partir du serveur. Une fois que toutes les images ont été transmises sur les ensemble de données, la réponse est très rapide.

question ... est-il possible d'éteindre le valueurl pendant le défilement et d'extraction en le rallumant lors du défilement est terminée?

Était-ce utile?

La solution

Ma solution est d'utiliser un mécanisme de mise en cache personnalisé comme celui que j'utilise déjà pour une autre application. Le problème se manifeste parce que vous faites défiler les images du passé qui n'a pas encore été téléchargés, le contrôle se déclenche pour aller chercher les fichiers encore non téléchargé.

Une fois téléchargé les images sont disponibles localement et donc la vitesse de défilement normalise. La solution est de vérifier si l'image est disponible localement et présenter un graphique app-paquet alternatif alors que l'image est en cours de téléchargement en arrière-plan. Une fois que l'image a été téléchargée, mettez à jour le modèle à l'image remplaçant l'image de souche qui venait du paquet.

Cela laisse l'interface utilisateur dans un état très réactif tout au long, laisse à l'utilisateur la possibilité d'interagir et permet une gestion de fond personnalisée des images.

Bien sûr, il aurait été bien si id Cocoa tout cela pour moi, mais qu'est-ce que je laisser faire? : -)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top