0

いくつかの 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 (null ではない) であることを確認しました。の内容を確認したところidData、すべての値が正しく取得されています。

スイッチが変更されるべきではないのに、なぜ変更されているのか誰か教えてもらえますか? 私は何を間違っていますか?

さらにコードが必要な場合はお知らせください。

4

1 に答える 1

2

idDataindex (19 == x)、つまりfalse/ NO、つまり 0でオブジェクトをチェックインしています。インデックス 0 のオブジェクトは非 nil であるため、常にスイッチをオンに設定しています。その行はおそらく次のようになります。

if ([[idData objectAtIndex:19] intValue] == x)
于 2013-08-05T23:28:32.037 に答える