Tri par défaut dans un NSTableView (avec Coredata et Bindings)

dakujadakuja Membre
20:32 modifié dans API AppKit #1
Bonjour,

J'ai un NSTableView bindé avec un NSArrayController.

Les tris par défaut fonctionnent très bien, mais quand j'ouvre l'application, il n'y a aucun tri par défaut. J'ai beau trifouiller sur le net, je n'arrive pas à  trouver une solution pour le tri par défaut (pas toujours facile d'ailleurs de trouver des informations sur les technos apple, heureusement que ce merveilleux site existe).

Pour faire un tri par défaut, est ce possible par le bindings ? si non comment le faire par le code ?

Merci

Réponses

  • Philippe49Philippe49 Membre
    20:32 modifié #2
    Tu as essayé le binding sortDescriptor du NSArrayController ?
  • dakujadakuja Membre
    20:32 modifié #3
    non pas vraiment.

    Je vais faire des recherches dessus, je vous tiens au courant  ;)
  • lpidenislpidenis Membre
    20:32 modifié #4
    Bonjour,

    j'ai moi aussi découvert ce site il n'y a pas très longtemps et je le trouve vraiment super :)
    Pour les sortes decriptor, tu peux par exemple créer un NSArray qui va contenir les descripteurs dont tu as besoin, et créer pour cette variable des "accesseurs", (pour que cette variable soit utilisable par les bindings).
    Ensuite dans la méthode appelée lors de l'initialisation tu peux attribuer l'ordre de trie dont tu as besoin:

    Par exemple, si tu travailles avec un NSDocument, dans la déclaration tu déclare ton NSArray:

    NSArray *mesSortOrders;

    puis tu déclares les accesseurs:
    - (NSArray *)mesSortOrders;
    - (void)setMesSortOrders:(NSArray *)value;

    dans le .m
    l'implementation:

    - (NSArray *)mesSortOrders {
       return [[mesSortOrders retain] autorelease];
    }

    - (void)setMesSortOrders:(NSArray *)value {
       if (mesSortOrders != value) {
           [mesSortOrders release];
           mesSortOrders = [value retain];
       }
    }


    et dans ce même .m, dans
    - (void)windowControllerDidLoadNib:(NSWindowController *)windowController
    {
    NSSortDescriptor *orderDescriptor;

    orderDescriptor = [NSSortDescriptor alloc] initWithKey:@&quot;date&quot; ascending:YES] autorelease];<br /> [self setMesSortOrders:[NSArray arrayWithObject:orderDescriptor;

    }


    (tu peux en ajouter d'autres à  ta convenance)

    ensuite il suffit de lier la variable SortOrder ton ArrayController (celui qui sert de source à  ta table view), au file Owner avec pour KeyPath: mesSortOrders

    Dans ce cas, tu auras toujours le même sort order au démarrage de l'application, si tu veux pouvoir sauvegardé l'ordre de trie choisi par l'utilisateur, tu peux le lier au User defaults, c'est le même principe.

  • dakujadakuja Membre
    20:32 modifié #5
    merci beaucoup pour ces explications, je vais essayer ça dès que possible :)
Connectez-vous ou Inscrivez-vous pour répondre.