2009-05-04 4 views
3

Il semble à partir des morceaux que je peux gratter ensemble que la réponse à celle-ci sera "non", donc je vais expliquer de façon générale ce que j'essaie de réaliser dans le cas que je tente de marteau dans une vis.Est-il possible d'utiliser les liaisons de Cocoa pour avoir un NSTableView éditable connecté à un NSMutableArray?

Ce que j'ai dans mon application est une liste d'extensions de fichiers valides à lire, pour lesquelles je suis récursif dans un répertoire. Je veux que ce soit une préférence, j'ai les suivantes:

NSMutableDictionary *dic = [NSMutableDictionary dictionary]; 
[dic setObject:[NSMutableArray arrayWithObjects:@"pdf", @"rtf", @"txt", nil] forKey:@"validExtensions"]; 
[[NSUserDefaults standardUserDefaults] registerDefaults:dic]; 

et je suis liant le NSTableView à un NSArrayController qui est lié au contrôleur Paramètres par défaut partagé ...

Est ce complètement la mauvaise approche d'avoir une liste personnalisable par l'utilisateur des extensions valides? Ai-je mal compris le rôle de NSUserDefaults?

Répondre

3

La réponse à la question posée dans le titre est "Oui" ... mais malheureusement, cela ne vous aide pas, car la mutabilité des structures de données dans le magasin de support NSUserDefaults n'est pas contrôlée par la mutabilité de les objets que vous passez avec registerDefaults :. Pour les valeurs de préférence qui sont elles-mêmes des structures, pour les modifier, vous devez lire l'ancienne structure, faire une copie mutable de la partie que vous avez besoin de modifier, la modifier, puis définir cette structure comme nouvelle valeur. Malheureusement, ce n'est pas bien adapté aux liaisons, donc vous avez besoin d'une couche de colle qui reflète les changements dans un tableau lié dans les préférences.

+0

Ah, bien sûr. Je ne peux pas changer le tableau lui-même, mais je peux remplacer le tableau dans son intégralité avec -setObject: forKey :, merci. – Drarok

Questions connexes