[Résolu] NSArrayController, View-based NSTableView et bindings...

berfisberfis Membre
décembre 2013 modifié dans API AppKit #1

Bonjour (ou bonsoir),


 


"Dé plous en plous difficile", comme dirait le général Alcazar. Ou "Tout est dans le titre" comme je l'ai lu parfois ici...


 


Je me lance dans la NSTableView avec view-based cells. Tant que je n'ai qu'une colonne, comme dans les exemples Apple, pas de souci, c'est même enfantin, ça marche et c'est très joli. Code: zéro ligne, dérivation: aucune.


 


Mais comme souvent, quand on en veut plus, ça se complique. Mon problème est que je veux plusieurs colonnes, sur le modèle de la première. Et là , ça coince au niveau des bindings.


 


Vous l'aurez compris, aficionados de la datasource, inutile de me proposer d'en passer par cette *facilité" " à  laquelle doivent se résigner les programmeurs iOS, faute de mieux. En MacOS, nous avons les bindings, et je tiens à  obtenir une solution bindings.  -_-


 


Je joins une copie d'écran qui montre mon problème actuel. La NSView cell contient trois NSTextFields joliment coloriés en bleu (objectValue.cleBleue) rose (objectValue.cleRose) et vert (objectValue.cleVerte).


 


Chaque NSTableColumn, me disais-je, devrait être liées au même contrôleur, mais par une clé différente: colonne 1: bindTo myController.arrangedObjects.colonne1, etc.


 


Mais rien à  faire: le contrôleur considère toutes ces colonnes comme une seule, et si j'en modifie une, les deux autres reproduisent la même modification.


 


Dès lors, comment binder ces colonnes pour qu'elles deviennent indépendantes ?


 


J'ai presque toujours trouvé ma solution ici. J'espère qu'il en sera de même cette fois...


Réponses

  • Je tiens une solution (c'est peut-être la bonne d'ailleurs). Il faut donner des clés différentes par colonne :


     


    Colonne 1 : NSTextField bleu = objectValue.cleBleue1, rose = objectValue.cleRose1 et vert = objectValue.cleVerte1


    Colonne 2 : NSTextField bleu = objectValue.cleBleue2, rose = objectValue.cleRose2 et vert = objectValue.cleVerte2

    ...

     

    Mais avant de mettre [Résolu] j'attends une confirmation (même d'un datasource lover)  -_-

     

  • Pour pouvoir te répondre il faut avoir une idée de la structure de tes données (ton modèle).


  • NS(Mutable)Array of NS(Mutable)Dictionary


  • Un extrait du modèle ?

  • berfisberfis Membre
    décembre 2013 modifié #6

    Le modèle tu l'as (et à  la rigueur qu'importe puisqu'il est abstrait), mais voici le "setup" du contrôleur:



    - (void) setup
    {
    [self setContent:[[[NSUserDefaults standardUserDefaults]valueForKey:@schedule]mutableCopy]];
    NSMutableArray *mutarr = self.content;
    for (long n=0; n< [mutarr count]; n++){
    NSDictionary *obj = [mutarr objectAtIndex:n];
    [mutarr replaceObjectAtIndex:n withObject:[obj mutableCopy]];
    }
    }

    Tout le reste est bindings. Comme je récupère un NSArray de NSDictionaries, il me faut tout transformer en mutable: Un NSMutableArray de NSMutableDictionaries, sinon la Vue ne sera pas éditable. C'est le rôle du contrôleur que de transformer le Modèle en quelque chose que l'utilisateur peut modifier (la Vue).


     


    La vraie question était: comment binder via cette Vue au Contrôleur.


Connectez-vous ou Inscrivez-vous pour répondre.