Привязать 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: и это должно работать нормально.

Другие вопросы по тегам