1

私はNSArrayof をループしています。次に、 if ステートメントの型でNSDictionariesある の値の 1 つを使用したいと考えています。しかし、これを行うのに問題があります。NSDictionaryBOOL

これが私のfor loop見た目です

for(NSDictionary *dict in arrayOfDictionaries)
    {
        NSNumber *boolCheck = [dict objectForKey:@"ISREADY"]; // isReady is the bool value which is either 0 or 1

        if (boolCheck == [NSNumber numberWithBool:YES]) {

//...
   }
}

何が起こっているのかというと、配列をループしますが、配列にこのタイプの値があることを 100% 確信しているにもかかわらず、if ステートメントの条件を決して満たすことはありません。

どんな助けでも大歓迎です。

4

2 に答える 2

7

NSNumber に BOOL が含まれていると仮定して、試してください

if ([boolCheck boolValue]) {
    ....
}
于 2013-05-01T01:11:42.253 に答える
1

ここで@Jim Tierneyの回答から: JSON to NSDictionary - ブール型をチェックする方法、より精巧な方法:

    - (BOOL)isBooleanKey:(id)key
{
    if ([key isKindOfClass:[NSNumber class]]) {
        if([key isEqual:[NSNumber numberWithBool:YES]]
           || [key isEqual:[NSNumber numberWithBool:NO]]){
            /* is a bool value if
             <key>somekey</key>
             <true/> or <false/> ie 1 or 0 but not -1, 2, 3 or 1,8
             */
            NSNumber *n = key;
            if (n.intValue) {
                if (n.intValue >= 0 && n.intValue <= 1) return YES;
            }
        }
    }
    // key is not a boolean
    return NO;
}

次のように呼び出すだけです:

if ([self isBooleanKey:[myDict objectForKey:@"some key"]]) {
    // is a bool object for key :-)
}

同じキーが異なるクラス (NSData、NSString など) を取る可能性がある場合に問題が発生したため、boolValue が例外を生成して失敗する可能性がありました!! 上記のコードは私のために解決します

于 2015-07-21T09:01:04.920 に答える