сегментированный элемент управления всегда возвращает 0

#iphone #uinavigationcontroller #indexing #switch-statement #uisegmentedcontrol

#iPhone #uinavigationcontroller #индексирование #оператор переключения #uisegmentedcontrol

Вопрос:

Я использую приложение TabBar с элементом навигации, который включает в себя UISegmentedControl .

Я подключил метод, когда перехватывается событие «изменение значения».

Метод всегда фиксирует 0 как SegmentIndex…

Вот мой заголовочный файл :

 #import <UIKit/UIKit.h>


@interface GraphNavController : UINavigationController {

    IBOutlet UIImage *image;
    CGPoint gestureStartPoint;
    UISegmentedControl *segmentedControl;
}

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event;
-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event;

-(IBAction) segmentedControlIndexChanged;

-(void)journalier;
-(void)mensuel;
-(void)annuel;


@property (nonatomic, retain) IBOutlet UIImage *image;
@property (nonatomic, retain) IBOutlet UISegmentedControl *segmentedControl;

@end
  

Метод здесь :

 -(IBAction) segmentedControlIndexChanged{

    switch (self.segmentedControl.selectedSegmentIndex) {
        case 0:
            NSLog(@"1");
            break;
        case 1:
            NSLog(@"2");
            break;
        case 2:
            NSLog(@"3");
            break;
        default:
            break;
    }

}
  

Я надеюсь, что мы найдем решение

Большое спасибо

Ответ №1:

Возможное объяснение этой проблемы заключается в том, что self.segmentedControl равен нулю. Является ли self.segmentedControl IBOutlet? Или создан в коде? Проверьте, является ли self.segmentedControl == нулевым.

Комментарии:

1. Спасибо за вашу помощь. В моем случае NSLog (@»self.segmentedControl == %d», self.segmentedControl); возвращает мне 0. segmentedcontrol — это выход (я обновил свой первоначальный пост, чтобы показать заголовок ^^)

2. 0 равно нулю. Проблема в том, что self.segmentedControl равен нулю. Вы назначили IBOutlet в Interface Builder?

3. какие элементы я должен связать??? BarSegmentedControl с чем? извините… Я не установил связь с выходом!

4. Я подключил выход из GraphNavController к BarSegmented, и он запущен… ошибка новичка… ОГРОМНОЕ СПАСИБО!!!

5. я взял unsigned short и сохраняю в нем измененный индекс сегмента по мере его изменения. 😉 проблема решена.

Ответ №2:

У меня была та же проблема, и я боролся с ошибкой nill UISegmentedControl.

И я НАШЕЛ ОТВЕТ.

Иногда у вас возникает та же проблема, но у вас все соединения в XIB.

ПРОБЛЕМА:У вас в self.segmentedControl ничего нет. В большинстве ситуаций, когда у вас все подключено правильно в XIB, это также не сработает.

ПРИЧИНА: Из-за различий в изучении Objective-C мы используем разные стили написания кода.

Решение: Например, мы пишем в интерфейсе UISegmentedControl *control; Когда вы @synthesize, как бы вы это сделали? Если вы напишете @synthesize control=_control; при такой записи у вас всегда будет nill NSLog(@»%i»,control.selectedSegmentIndex).

Итак, у нас ошибка в @synthesize или в коде.

Решение

Для тех, кто пишет @synthesize control; используйте control.selectedSegmentIndex

Для тех, кто пишет @synthesize control=_control; используйте _control.selectedSegmentIndex

И все будет работать правильно.