Bind directement dans le Shared User Default Controller
fleurantin
Membre
Je réalise les préférences de mon application dans une fenêtre.
En ce qui concerne les éléments simples (NSTextField, NSButton etc) pas de problème pour les binder avec le Shared User Default Controller : controlller key = values et Model key path = "nom de ma variable".
Je tente de réaliser des bindings pour des NSTableView avec le Shared User Default Controller.
Je n'ai rien trouvé sur les forums.
J'ai donc procédé ainsi (ce qui est long, répétitif et fastidieux) :
- création d'une sous-classe de NSArrayController en mode Class avec le nom de la class gérée
- création de mes valeurs d'usine dans un fichier plist
- gestion de la lecture du fichier plist à la création de la fenêtre
- gestion de l'écriture des modifications dès qu'elles apparaissent.
- gestion du undo
- etc
Pour de simples listes de valeurs (une seule colonne) j'ai essayé de binder le content du NSArrayController au Shared User Default Controller avec le nom de Key d'un Array contenu dans mes préférences mais pas moyen ensuite de binder les NSTableView (pas de nom de clé ?)
Merci d'avance pour toutes vos suggestions.
En ce qui concerne les éléments simples (NSTextField, NSButton etc) pas de problème pour les binder avec le Shared User Default Controller : controlller key = values et Model key path = "nom de ma variable".
Je tente de réaliser des bindings pour des NSTableView avec le Shared User Default Controller.
Je n'ai rien trouvé sur les forums.
J'ai donc procédé ainsi (ce qui est long, répétitif et fastidieux) :
- création d'une sous-classe de NSArrayController en mode Class avec le nom de la class gérée
- création de mes valeurs d'usine dans un fichier plist
- gestion de la lecture du fichier plist à la création de la fenêtre
- gestion de l'écriture des modifications dès qu'elles apparaissent.
- gestion du undo
- etc
Pour de simples listes de valeurs (une seule colonne) j'ai essayé de binder le content du NSArrayController au Shared User Default Controller avec le nom de Key d'un Array contenu dans mes préférences mais pas moyen ensuite de binder les NSTableView (pas de nom de clé ?)
Merci d'avance pour toutes vos suggestions.
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Cependant j'ai un effet bizarre.
Le NSArrayControler est bindé à mon Array de NSDictionary en pref.
Ma colonne de la TableView est bindé sur leNSArrayControler avec arrangedObjects et ma clé.
Tout s'affiche.
Add ne marche pas en direct. Je dois créer une fonction ajoute et créer mon NSDictionary avant de le charger.
Remove fonctionne.
Problème avec la modification par l'édition.
Elle se fait à l'affichage.
Si je quitte et je relance l'appli les lignes ajoutées ou ôtées sont prises en compte mais pas la motif de la valeur par l'édition.
J'ai l'impression que le bind ne sait pas accéder à la motif de la valeur.
Une idée?
Cependant je n'ai pas grand chose à coder pour la mise à jour.
Du genre
@implementation TF_Test
- (IBAction)AjouteTest:(id)sender{
NSDictionary *monDico=/color]NSDictionary[color=#000000] [/color]dictionaryWithObject[color=#000000]:[/color][color=#df801e]@"112233"[/color][color=#000000] [/color]forKey[color=#000000]:[/color][color=#df801e]@"maCle"[/color][color=#000000;
[self addObject:monDico];
}
// on a fini d'éditer la ligne maLigne et on la stocke car le bind ne sait pas le faire;
- (void)controlTextDidEndEditing:(NSNotification *)aNotification{
NSNumber *maChaine=/color]NSNumber[color=#000000] [/color]numberWithFloat[color=#000000]:[[aNotification [/color]object[color=#000000 floatValue]]; // on récupère la chaine validée
NSDictionary *monDico=/color]NSDictionary[color=#000000] [/color]dictionaryWithObject[color=#000000]:maChaine [/color]forKey[color=#000000]:[/color][color=#df801e]@"maCle"[/color][color=#000000; // on crée un dico correspondant
NSUserDefaults *unNSUserDefaults=/color]NSUserDefaults[color=#000000] [/color]standardUserDefaults[color=#000000; // on récupère le array contenant les dicos
NSMutableArray *unTableau=unNSUserDefaults [/color]objectForKey[color=#000000]:[/color][color=#df801e]@"Test"[/color][color=#000000 mutableCopyWithZone:NSDefaultMallocZone()];
[unTableau replaceObjectAtIndex:maLigne withObject:monDico]; // on remplace celui édité
[unNSUserDefaults setObject:unTableau forKey:@Test];// on poste la modification en pref
}
// on commence l'édition d'une cellule
- (BOOL)tableView:(NSTableView *)aTableView shouldEditTableColumn:(NSTableColumn *)aTableColumn row:(NSInteger)rowIndex{
maLigne=[aTableView selectedRow];
maColonne=[aTableView selectedColumn];
return YES;
}
@synthesize maLigne,maColonne;
@end
(merci d'utiliser les balises code)
Ici ce code est mauvais, il faudrait NSMutableDictionary au lieu de NSDictionary