NSSegmentedControl -selectedSegment всегда возвращает 0

У меня есть NSSegmentedControl с двумя сегментами, установленными в режим "Выберите Нет" в Интерфейсном Разработчике. Независимо от того, что я пытаюсь, я не могу получить -selectedSegment, чтобы вернуть что-либо, кроме 0, даже если сегмент 0 даже отключен по умолчанию и не может быть выбран. Вот соответствующая функция, которая вызывается при нажатии на любой сегмент в элементе управления:

-(IBAction)changeStep:(id)sender
{
    [stepContainer setHidden:TRUE];
    [(NSView *)[[wizard stepArray] objectAtIndex:(NSInteger)[wizard step]] removeFromSuperview];
    switch ([[navigationButton cell] selectedSegment])
    {
    case 0:
        [wizard setStep:(NSInteger *)[wizard step]-1];
        break;
    case 1:
        [wizard setStep:(NSInteger *)[wizard step]+1];
        break;
    default:
        break;
    }
    //[[navigationButton cell] setSelected:FALSE forSegment:[navigationButton selectedSegment]];

    if ([wizard step] > 0)
    {
        [wizard setStep:0];
        [navigationButton setEnabled:FALSE forSegment:0];
    }

    NSLog(@"%d", [wizard step]);
    [stepContainer addSubview:(NSView *)[[wizard stepArray] objectAtIndex:(NSInteger)[wizard step]]];
    [stepContainer setHidden:FALSE withFade:TRUE];
}

Я также пытался использовать -isSelectedForSegment, но он имеет тот же результат.
Любая помощь, которую вы можете оказать, будет потрясающей, я понятия не имею, что я делаю неправильно. Спасибо!
SphereCat1

РЕДАКТИРОВАТЬ: Это момент facepalm, см. Мой ответ ниже.

3 ответа

Решение

Хорошо, это момент лицевой стороны лица. Выяснилось, что я ошибался, и в моей логике увеличения / уменьшения шага была просто ошибка.

Все лучше!:)

Facepalm
SphereCat1

Вы, кажется, делаете много кастинга в местах, которые вам не нужны.

[(NSView *)[[wizard stepArray] objectAtIndex:(NSInteger)[wizard step]] removeFromSuperview];

Что значит [wizard step] вернуть? Вам не нужно кастовать его.

    [wizard setStep:(NSInteger *)[wizard step]-1];

Это еще более противоречиво. NSInteger * тип указателя (NSInteger это не объект). Если [wizard setStep:] занимает NSInteger *, возможно, это связано с тем, что он используется в качестве параметра inout, возможно, чтобы предоставить вам новый шаг, если он отличается от запрошенного. В этом случае вам нужно сделать что-то вроде этого:

NSInteger newStep = [wizard step] - 1;
[wizard setStep: &newStep];

Вы уверены, что navigationButton инициализируется? Положить NSLog утверждение как это:

NSLog (@"%@", navigationButton);

Если вы сообщение nil объект, вы получите 0 в следствии. Если navigationButton является IBOutlet Вы должны убедиться, что он правильно подключен в Интерфейсном Разработчике.

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