Я пытаюсь создать панель предпочтений, которая будет находиться в системных настройках. Все привязки выполняются как обычно (для обычного оконного приложения), но когда вызывается установщик для свойства привязки (данные обновляются), данные таблицы не сбрасываются. Предустановленные панели позволяют обновлять данные таблицы через привязки? Я также попытался использовать источник данных таблицы неудачно.Панель предпочтений и привязки NSTableView
Чтобы уточнить, у меня есть свойство NSMutableArray в моем основном классе prefPane, объекте, представляющем основной класс prefPane, и arrayController в IB, который привязан к столбцу таблицы. в методе init основного класса prefPane я установил значение NSMutableArray, которое должным образом отражено в области pref, однако (просто чтобы проверить, работают ли привязки), у меня есть NSTimer, который сбрасывает значение моего массива NSMutable когда он заканчивается. Сообщение консоли сообщает мне, что значение правильно сбрасывается, однако изменения не отражаются в панели предварительной настройки.
Итак, в моей текущей версии я использую следующий код, чтобы установить свойства для произвольных значений (упрощено, чтобы попытаться заставить привязки работать вообще). Затем значение свойства сбрасывается таймером через 10 секунд. Хотя свойство корректно обновляется (проверено журналом консоли), панель предварительного просмотра не отражает изменения в представлении таблицы. К сожалению, я не могу опубликовать скриншоты привязок. У меня есть объект в IB для класса syncFrontEndPref. Тогда у меня есть контроллер массива, связанный с этим объектом w/путь ключа модели в спискеArrayArray. Затем мой столбец таблицы привязан к упорядоченным объектам массива. Это правильно загружается с помощью «test», «test1», «test2» в области pref (как заполнено из метода init). Однако, когда заселен от таймера, изменения не отражаются на панели прив (хотя журнал консоли подтверждает listArray действительно изменилась
Вот код:.
@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);
}
Как насчет кода? – Eimantas
В частности, как определяются ваши аксессоры изменяемого массива? –