我使用了几个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
的内容,并且正确获取了所有值。
任何人都可以告诉我为什么我的开关正在改变,即使他们不应该?我做错了什么?
如果需要更多代码,请告诉我。
答案 0 :(得分:2)
您正在检查idData
位置(19 == x)
处的对象,即false
/ NO
,即0;索引0处的对象是非零的,因此您始终设置开关。该行应该是:
if ([[idData objectAtIndex:19] intValue] == x)