2013-06-30 2 views
-2

У меня есть код, который проверяет, имеет ли камера iphone флеш-память. А затем проверить, если мой переключатель включен, используя этот код:Objective-C: Почему мой оператор if не работает?

if(switch1.on){ 

       } 

свет включается нормально без этого кода, и я также попробовал этот код, а также:

if(!(switch1.on)){ 

        } 

и успешно превращает My вспышка камеры на, но и превращает его даже тогда, когда переключатель установлен в положение выключено

Вот мой полный код:

-(IBAction)torchon:(id)sender{ 
    AVCaptureDevice *flashlight = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo]; 
    if ([flashlight isTorchAvailable] & [flashlight isTorchModeSupported:AVCaptureTorchModeOn]) { 

     BOOL success = [flashlight lockForConfiguration:Nil]; 
     if(success){ 
      if(switch1.on){ //// or (!(switch1.on)) 

       on.hidden = YES; 
       [UIScreen mainScreen].brightness = 1.0; 
       [flashlight setTorchMode:AVCaptureTorchModeOn]; 
       [flashlight unlockForConfiguration]; 
      } 
     } 
    }  
} 

любая помощь будет оценена

**EDIT:** 

Вот код, где я установить переключатель в положение не используя ibactions, когда значение переключателя изменилось. Этот код работает успешно:

-(IBAction)switch1{ 
    if (switch1.on) { 
     switch1.on = YES; 
     switch2.on = NO; 
    } else{ 
     switch2.on = YES; 
     switch1.on = NO; 
    }  
} 

-(IBAction)switch2{ 
    if (switch2.on) { 
     switch2.on = YES; 
     switch1.on = NO; 
    } else{ 
     switch1.on = YES; 
     switch2.on = NO; 
    } 
} 

Ответ

Сначала добавьте BOOL:

bool yes; 

затем установить, что логическое значение в viewdidload

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view, typically from a nib. 
    yes = YES; 
} 

После этого установите его YES, когда вызывается вызов и устанавливаете его к NO когда переключатель выключен:

-(IBAction)switch1{ 
    if (swich1.on) { 
    swich1.on = YES; 
    swich2.on = NO; 
     yes = YES; 
    } 

} 


-(IBAction)switch2{ 
    if (swich2.on) { 

    swich2.on = YES; 
    swich1.on = NO; 
     yes = NO; 
    } 

} 

, наконец, где он проверяет if(switch1.on){} вам необходимо изменить его if(yes==YES){} так вместе, что если заявление выглядит следующим образом:

-(IBAction)torchon:(id)sender{ 
    AVCaptureDevice *flashlight = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo]; 
    if ([flashlight isTorchAvailable] & [flashlight isTorchModeSupported:AVCaptureTorchModeOn]) { 

     BOOL success = [flashlight lockForConfiguration:Nil]; 
     if(success){ 
      if(yes==YES){ 
       on.hidden = YES; 
       [UIScreen mainScreen].brightness = 1.0; 
       [flashlight setTorchMode:AVCaptureTorchModeOn]; 
       [flashlight unlockForConfiguration]; 

      } 
     } 

    } 

} 
+0

Не вопрос Xcode. Любые шансы 'switch1' -' nil'? –

+0

Можем ли мы увидеть код, в котором вы устанавливаете 'on = NO'? –

+0

@ Анооп Вайдия Обязательно проверьте мое редактирование! – user2534692

ответ

0

UISwitch имеет еще один поглотитель для on Недвижимость.

@property(nonatomic, getter=isOn) BOOL on; 

Это может быть лучше использовать .isOn вместо .on для получения значения.

Кроме того, некоторые из вашего кода может быть упрощена:

-(IBAction)switch1{ 
    [switch2 setOn:!switch1.isOn];  
} 

-(IBAction)switch2{ 
    [switch1 setOn:!switch2.isOn]; 
} 

Он может получить даже лучше, если вы используете sender действия в своих методах.

+0

Я не думаю, что это имеет значение, если вы проверите 'switch.on' или' switch.isOn'. –

+0

@MartinR Это не так. Это просто хорошая практика. Что касается конкретной проблемы, нужна дополнительная информация. –

+0

Я отправил ответ о том, как успешно исправить проблему. – user2534692

0

Похоже, что ваши методы IBAction имеют аналогичную форму, как и у получателя для коммутатора. Возможно, это может привести к нежелательным побочным эффектам. Реорганизовать методы одного метода, в соответствии с хорошей практикой программирования:

-(IBAction)switchDidChange:(UISwitch*)aSwitch { 
    UISwitch* otherSwitch = (aSwitch == switch1)? switch2 : switch1; 
    [otherSwitch setOn:!aSwitch.on animated:YES]; 
} 

Кроме того, в вашем коде on свойства не действительно, кажется, влияет на то, что включено или выключено. Включите эту условность.

+1

'switch' является ключевым словом C и не может использоваться как имя переменной! – Felix

+0

Спасибо за исправления. – Mundi

Смежные вопросы