Fonction dans une méthode d'un nstableview
helio
Membre
Bonjour à tous,
J'ai une application Mac OS dans laquelle j'affiche des données dont l'id et le libellé d'un produit à partir de la méthode :
func tableView(tableView: NSTableView, viewForTableColumn tableColumn: NSTableColumn?, row: Int) -> NSView?
Dans cette méthode je fais appel à une fonction qui donne le libellé d'un produit à partir de son id mais cela ne fonctionne pas, la méthode est bien appelée mais la mise à jour des données de ne se fait pas.
Auriez vous une idée du problème ?
J'ai une application Mac OS dans laquelle j'affiche des données dont l'id et le libellé d'un produit à partir de la méthode :
func tableView(tableView: NSTableView, viewForTableColumn tableColumn: NSTableColumn?, row: Int) -> NSView?
Dans cette méthode je fais appel à une fonction qui donne le libellé d'un produit à partir de son id mais cela ne fonctionne pas, la méthode est bien appelée mais la mise à jour des données de ne se fait pas.
Auriez vous une idée du problème ?
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Tu crées la vue et la renvoies ?
Désolé j'avais laissé une variable i initialisée à 0 sans l'incrémenter ! ça fonctionne en fait.
Merci.
En revanche ma façon de faire n'est pas optimisée, lorsqu'on scroll la table view c'est saccadé. En effet
est-ce qu'il vaut mieux charger toutes les données avant et les stocker dans un NSMutableArray pour les afficher plus tard dans
func tableView(tableView: NSTableView, viewForTableColumn tableColumn: NSTableColumn?, row: Int) -> NSView?
ou autre chose ?
Merci.
- à l'affichage de la table, on lance une requête à un web service
- un JSON est renvoyé par le web service
- on compose les objets correspondant au JSON dans la couche Modèle
- si le Modèle référence des images, on ne les charge que quand la cellule est vraiment affichée. En attendant, on affiche une image "placeholder".
- on conserve les images dans un cache (de taille limitée)
En plus, on fait tous les "travaux" sur le modèle sur un fil arrière-plan, en faisant les mises à jour UI sur le fil principale.
Avec une notification ?
Avec un block qui ne bloquera pas le mainthread/UI, comme le font SDWebImage/AFNetworking (et sa catégorie UIImage ou UIImageView) ou assimilé.
Comment réalises-tu le lien entre l'image qui vient d'être téléchargée et la UICell ou NSCell ?
Comme ça, je dirais qu'une notif est le plus simple.
(Et je n'aime pas les notifications: c'est global, donc chiant à déboguer).
C'est implémenté sous forme de catégorie sur UIImageView. C'est elle qui retient le bloc de completion de la requête réseau. Donc, si l'UIImageView a été évacuée de la mémoire, le bloc n'est pas appelé.
Comme je le disais, il y a un système de cache des images.