-2

我有这样的代码

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

dataArray是一个NSMutableArray最终包含一个 JSON 字典。

但我得到相同的控制台输出,无论成功为真或假,但我的控制台输出始终相同。我的控制台输出是:

对于 FALSE 或 NO:

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

对于 TRUE 或 YES:

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

在这两种情况下,如果部分被执行。

在 NSUserDefaults 中有一种方法boolForKey,但是在NSMutableArray.

4

9 回答 9

1

您需要阅读 的[NSArray valueForKey:]细则,特别是:

返回一个数组,其中包含调用 valueForKey: 对每个数组对象使用 key 的结果。

和:

返回的数组包含每个返回 nil 的对象的 NSNull 元素。

因此,如果数组包含 3 个对象并且它们都没有success键,那么您将得到一个NSNull返回 3 个对象的数组。

因此,只要非空,该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 回答
1

您可以通过简单的方式做到这一点:我在您的响应 json 值中看到的是,您在 dataArray 中的索引为 0 处有字典

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

对数组使用索引而不是键。

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

替换你的代码行

 if ([dataArray valueForKey:@"success"]) {
}

 if ([[dataArray valueForKey:@"success"] integerValue]) {
}

希望它对你有用。

于 2013-08-29T11:07:49.643 回答
0

它可以将线路替换为

if ([[[dataArray objectAtIndex:0] valueForKey:@"success"] boolValue])
于 2013-08-29T11:36:52.633 回答
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

数组不存储键,访问数组中项目的唯一方法是通过索引。您应该改用 NSDictionary/NSMutableDictionary。如果你想使用 bool 将其存储为 NSNumber,[NSNumber numberWithBool:YES] 然后使用实例方法 valueForBool 将其读回。

于 2013-08-29T10:02:53.273 回答
0

如果你想要布尔值,请使用它

if([[dataArray valueForKey:@"success"] boolValue])
{
//i.e success is true 
}

如果响应包含字典数组,那么我们可以使用循环和检查条件,这里 i 是数组的索引变量,

if([[[dataArray objectAtIndex:i] objectForKey:@"success"] boolValue])
{
// success is true , 
}
于 2013-08-29T10:17:18.403 回答
0

否则使用if([[[dataArray objectAtIndex:0] valueForKey:@"success"] isEqualToString:@"1"])

于 2013-08-29T10:01:00.157 回答