J'essaie de créer un volet de préférence qui se trouve dans les préférences du système. Toutes les liaisons sont effectuées comme d'habitude (pour une application fenêtrée normale), mais lorsque le setter de la propriété de liaison est appelé (les données sont mises à jour), les données de la table ne sont pas réinitialisées. Les panneaux de préférences sont-ils capables de mettre à jour les données de table via des liaisons? J'ai également essayé d'utiliser une source de données de table sans succès.Volet de préférences et liaisons NSTableView
Pour clarifier, j'ai une propriété NSMutableArray dans la classe principale de mon prefPane, un objet représentant la classe principale de prefPane, et un arrayController dans IB qui est lié à la colonne de la table. Dans la méthode init de la classe principale de prefPane, je définis la valeur de NSMutableArray, qui est correctement reflétée dans le panneau pref (juste pour tester si les bindings fonctionnent), j'ai un NSTimer qui réinitialise la valeur de mon tableau NSMutable quand ça finit. Un message de console me dit que la valeur est correctement réinitialisée, cependant, les changements ne sont pas reflétés dans le panneau pref. Donc, dans ma version actuelle, j'utilise le code suivant pour définir les propriétés à des valeurs arbitraires (simplifié pour essayer d'obtenir des liaisons pour fonctionner). La valeur de la propriété est ensuite réinitialisée par un temporisateur 10 secondes plus tard. Bien que la propriété soit correctement mise à jour (vérifiée par le journal de la console), le volet pref ne reflète pas les modifications dans la tableview. Malheureusement, je ne peux pas poster des captures d'écran des liaisons. J'ai un objet dans IB pour la classe syncFrontEndPref. J'ai alors un arraycontroller lié à cet objet avec un chemin clé de modèle de listArray. Ensuite, ma colonne de table est liée aux objets arrangés arraycontroller. Cela se charge correctement avec "test", "test1", "test2" dans le volet pref (tel que rempli à partir de la méthode init). Toutefois, lorsque repeuplée de la minuterie, les modifications ne sont pas reflétées dans le volet pref (bien que journal de la console confirme ListArray a en effet changé
Voici le code:.
@interface syncFrontEndPref : NSPreferencePane
{
NSMutableArray *listArray;
NSNumber *syncInt;
AuthenticateUser *newUser;
NSMutableArray *syncIntervalList;
IBOutlet NSTableView *theTableView;
}
@property (retain) NSMutableArray *listArray;
@property (retain) NSMutableArray *syncIntervalList;
- (void) mainViewDidLoad;
-(IBAction)syncIntervalValueChanged:(id)sender;
-(IBAction)tableViewSelected:(id)sender;
@implementation syncFrontEndPref
@synthesize listArray, syncIntervalList;
-(id) init{
//populate nsarray w/ list data to display
//[self setListArray: [NSMutableArray arrayWithArray:[[[NSDictionary dictionaryWithContentsOfFile:[GetFilePath pathForFile]] objectForKey:@"lists"] allObjects]]];
[self setListArray: [NSMutableArray arrayWithObjects: @"test", @"test1", @"test2", nil]];
//define values for drop-down sync interval selector
[self setSyncIntervalList:[NSMutableArray arrayWithObjects: @"1 minute", @"5 minutes", @"10 minutes", @"30 minutes", @"24 hours", nil]];
return self;
}
//code for the timer and selector method
- (void) mainViewDidLoad{
NSTimer *timer = [[NSTimer new] autorelease];
int syncTime = 10;
timer = [NSTimer scheduledTimerWithTimeInterval: syncTime target:self selector:@selector(targetMethod:) userInfo:nil repeats: YES];
}
-(void)targetMethod:(id)sender{
NSLog(@"running timer...");
[self setListArray: [NSMutableArray arrayWithObjects: @"0", @"1", @"2", nil]];
NSLog(@"%@", listArray);
}
Que diriez-vous du code? – Eimantas
Plus précisément, comment sont définis les accesseurs de votre matrice mutable? –