Привязать NSSegmentedControl к логическому значению? - PullRequest
0 голосов
/ 19 мая 2011

Я все еще новичок в Привязках Какао, и я не нашел ответа на этот вопрос даже после просмотра документов.То, что я хочу сделать, это иметь сегментированный элемент управления, который имеет только два сегмента.Если первый сегмент выбран, то предпочтение в NSUserDefaults должно быть ДА, но если второй сегмент выбран, то предпочтение должно быть НЕТ.Это просто сделать с помощью кода:

-(IBAction)segmentSelectionChanged:(id)sender {
    NSInteger selectedSegment = [sender selectedSegment];
    [[NSUserDefaults standardUserDefaults] setBool:(selectedSegment==0)?YES:NO forKey:@"somepref"];
}

, но я бы хотел сделать это с помощью привязок (выбранный индекс выглядит многообещающе).Есть ли способ сделать что-то подобное?Спасибо!

1 Ответ

1 голос
/ 19 мая 2011

Я думаю, что у вас уже есть - связывание элемента управления selectedIndex в IB:

Bind To: Shared User Defaults Controller
Controller Key: values
Key Path: WhateverYouWant

, кажется, работает просто отлично.

Проблема в том, что вам действительно нужно, чтобы она была 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:, и он должен работать нормально.

...