UISwitch未根据值正确设置

时间:2013-08-05 23:25:29

标签: ios objective-c uiswitch

我使用了几个UISwitch,由于一些奇怪的原因,我无法正确设置它们。

我正在提取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(非空)。我检查了idData的内容,并且正确获取了所有值。

任何人都可以告诉我为什么我的开关正在改变,即使他们不应该?我做错了什么?

如果需要更多代码,请告诉我。

1 个答案:

答案 0 :(得分:2)

您正在检查idData位置(19 == x)处的对象,即false / NO,即0;索引0处的对象是非零的,因此您始终设置开关。该行应该是:

if ([[idData objectAtIndex:19] intValue] == x)