-2

私はそのようなコードを持っています

if ([dataArray valueForKey:@"success"]) {
    [self.feedsArray addObjectsFromArray:dataArray];
    NSLog(@"self.feedsArray: %@",self.feedsArray);
} else {
    NSLog(@"no feed found ");
}

dataArrayNSMutableArray最終的に JSON ディクショナリを含む です。

しかし、TRUEまたはFALSEの成功に関係なく、同じコンソール出力が得られますが、コンソール出力は常に同じです。コンソール出力は次のとおりです。

FALSE または NO の場合:

self.feedsArray: (
    {
        action = register;
        message = "Invalid parameters";
        success = 0;
    }
)

TRUE または YES の場合:

self.feedsArray: (
    {
        action = register;
        message = "valid parameters";
        success = 1;
    }
)

どちらの場合も、 part が実行された場合。

NSUserDefaults には方法boolForKeyがありますが、NSMutableArray.

4

9 に答える 9

1

配列にはキーの代わりにインデックスを使用します。

NSDictionary dictionary = (NSDictionary *)dataArray[0];
if ([(NSNumber *)[dictionary objectForKey:@"success"] boolValue]) {
    // ...
} 
于 2013-08-29T09:59:16.993 に答える
1

これは簡単な方法で行うことができます: 応答の json 値に表示されるのは、インデックス 0 の dataArray に辞書があることです。

 NSMutableDictionary *responseDict = [dataArray objectAtIndex:0];
 if([[responseDict objectForKey:@"success"] boolValue])
 {
      NSLog(@"Success: 1");
 }
 {
      NSLog(@"Success: 0");
 }
于 2013-08-29T10:25:25.580 に答える
1

[NSArray valueForKey:]具体的には、細かい活字を読む必要があります。

配列の各オブジェクトで key を使用して valueForKey: を呼び出した結果を含む配列を返します。

と:

返される配列には、nil を返す各オブジェクトの NSNull 要素が含まれます。

たとえば、配列に 3 つのオブジェクトが含まれていて、いずれにもsuccessキーがない場合、3 つのNSNullオブジェクトの配列が返されます。

したがって、ifステートメントがでない場合はいつでもdataArray実行されますが、これは明らかに意図したものではありません。

返された配列の内容を確認する必要があります。

BOOL succeeded = NO;
NSArray *results = [dataArray valueForKey:@"success"];
for (NSObject *obj in results) {
    succeeded = [obj isKindOfClass:[NSNumber class]] && [(NSNumber *)obj boolValue];
    if (succeeded)
        break;
}
if (succeeded) {
    [self.feedsArray addObjectsFromArray:dataArray];
    NSLog(@"self.feedsArray: %@",self.feedsArray);
} else {
    NSLog(@"no feed found ");
}
于 2013-08-29T10:07:58.277 に答える
0

これを試して

if ([[dataArray valueForKey:@"success"]isEqualToString:@"1"]) {
     [self.feedsArray addObjectsFromArray:dataArray];
     NSLog(@"self.feedsArray: %@",self.feedsArray);
}
else {
     NSLog(@"no feed found ");
}

それはうまくいくでしょう。

于 2013-08-29T10:10:50.193 に答える
0

それ以外の場合は使用if([[[dataArray objectAtIndex:0] valueForKey:@"success"] isEqualToString:@"1"])

于 2013-08-29T10:01:00.157 に答える
0

配列はキーを格納しません。配列内のアイテムにアクセスする唯一の方法は、インデックスを使用することです。代わりに NSDictionary/NSMutableDictionary を使用する必要があります。bool を NSNumber として使用する場合は、[NSNumber numberWithBool:YES] を使用し、インスタンス メソッド valueForBool を使用して読み戻します。

于 2013-08-29T10:02:53.273 に答える
0

行を次のように置き換える作業

if ([[[dataArray objectAtIndex:0] valueForKey:@"success"] boolValue])
于 2013-08-29T11:36:52.633 に答える