UISwitch не устанавливается должным образом на основе значений

Я использую несколько UISwitches и не могу настроить их правильно по какой-то странной причине.

Я извлекаю данные JSON, которые в основном представляют собой набор целых чисел в определенной последовательности, основанной на их значениях, я хочу, чтобы переключатель был включен или выключен. Вот часть соответствующего кода:

- (void)fetchData
{

    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        NSData* data = [NSData dataWithContentsOfURL: [NSURL URLWithString:@"http://10.101.10.101/get/channels"]];

        NSError* error;

        LightingData = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error];
        idData = [LightingData valueForKey:@"level"];

        NSLog(@"Lighting Values: %@", [idData objectAtIndex:19]);

        dispatch_async(dispatch_get_main_queue(), ^{

       });
    });

}

- (void)dataCheck
{
    int x = 100;

    if ([idData objectAtIndex:19 == x])
    {
        [fieldsOverheadStatus setOn:YES];
    }
}

Метод dataCheck продолжается некоторое время, устанавливая около 20 переключателей.

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

Я устанавливаю точки останова, чтобы увидеть, вызывается ли метод dataCheck, и это происходит. Как видите, я вставил логин, чтобы посмотреть, каково значение objectAtIndex:19, и возвращаемое значение равно 0 (не null). Я проверил содержимое idData и все значения получены правильно.

Может ли кто-нибудь сказать мне, почему мои переключатели меняются, даже если они не должны быть? Что я делаю неправильно?

Дайте мне знать, если нужен код.


person CaptJak    schedule 05.08.2013    source источник


Ответы (1)


Вы проверяете объект в idData по индексу (19 == x), т.е. false/NO, т.е. 0; объект с индексом 0 не равен нулю, поэтому вы всегда включаете переключатель. Эта строка, вероятно, должна быть:

if ([[idData objectAtIndex:19] intValue] == x)
person Noah Witherspoon    schedule 05.08.2013