Привязать NSSegmentedControl к логическому значению?
Я все еще новичок в "Привязках какао" и не нашел ответа на этот вопрос даже после просмотра документов. Я хочу иметь сегментированный элемент управления, который имеет только два сегмента. Если первый сегмент выбран, то предпочтение в NSUserDefaults должно быть ДА, но если второй сегмент выбран, то предпочтение должно быть НЕТ. Это тривиально сделать через код:
-(IBAction)segmentSelectionChanged:(id)sender {
NSInteger selectedSegment = [sender selectedSegment];
[[NSUserDefaults standardUserDefaults] setBool:(selectedSegment==0)?YES:NO forKey:@"somepref"];
}
но я бы хотел сделать это через привязки (выбранный индекс выглядит многообещающе). Есть ли способ сделать что-то подобное? Спасибо!
1 ответ
Я думаю, что у вас уже есть - связывание контроля selectedIndex
в IB:
Привязать к: общий пользовательский контроллер по умолчанию Ключ контроллера: значения Ключевой путь: все, что вы хотите
Кажется, работает просто отлично.
Проблема в том, что вам действительно нужно, чтобы BOOL
? Это просто typedef
за signed char
в любом случае. Смотрите objc.h, строки 43, 49 и 50:
typedef signed char BOOL;
// ...
#define YES (BOOL)1
#define NO (BOOL)0
Вы можете вытащить значение обратно, используя integerForKey:
и приведем его (возможно, лучше, потому что более явный):
(BOOL)[[NSUserDefaults sharedUserDefaults] integerForKey:@"WhateverYouWant"];
или просто продолжайте использовать boolForKey:
и это должно работать нормально.