2011-12-29 111 views
1

我读一个JSON代码,如:的NSMutableArray:如何允许重复的值

[{"question_id":"1", 
    "trigger_value":"Yes", 
    "question_text":"What is your first name?", 
    "question_type":"YN"},  
{"question_id":"2", 
    "trigger_value":"Yes", 
    "question_text":"What is your second name?", 
    "question_type":"YN"} 
] 

但是,一旦它被设置到NSMutableArray里,重复值将被删除。我想让他们检查每个问题的question_type。

NSString *question_id; 
    NSString *question_text; 
    NSString *question_type; 

    while (dicjson = (NSDictionary*)[enumerator nextObject]) { 
     question_id = [dicjson objectForKey:@"question_id"];   
    question_type = [dicjson objectForKey:@"question_type"]; 

    [mutjson setObject:question_id forKey:question_type]; 
}  

你能给我任何想法允许重复的值......? 在此先感谢。

回答

3

mutjson看起来像一个可变的字典,而不是一个可变的数组。

所以是的,在一个字典对象中,如果你设置了相同的键,它将覆盖以前的值。 如果你需要存储字典对象,创建一个可变数组并添加每个对象数组内的dintionary对象...

NSMutableArray *results = [[NSMutableArray alloc] init]; 

while (dicjson = (NSDictionary*)[enumerator nextObject]) { 
    question_id = [dicjson objectForKey:@"question_id"];   
    question_type = [dicjson objectForKey:@"question_type"]; 
    [result addObject:[NSDictionary dictionaryWithObject:question_id forKey:question_type]]; 
} 
+0

谢谢,这是一个可变的字典。我试过你的代码,它的作用就像一个魅力。我还想问另一件事,有什么方法可以将数据中的question_id,question_text和question_type存储在数组中吗?否则,我会做2个数组。 – user973067 2011-12-29 11:44:38

+0

那么我的代码将它存储在单个数组中,那么为什么要使用2个数组?如果您想稍后搜索数组,则这是您的问题,您应该使用NSPredicate类。搜索NSPredicate的stackoverflow以查看它是如何完成的(这很容易) – Lefteris 2011-12-29 11:49:47

+0

我想在表单和输入中显示问题。所以我想看看如果这是/没有问题或文本框类型的问题。感谢您的建议,我将对NSPredicate有所了解。 – user973067 2011-12-29 11:57:14

1

你不能NSMutableArray里setObject:forKey:。你必须使用addObject:。它也更容易创建像这样的阵列:

NSArray *values = [jsonDict allValues]; 
+0

谢谢,你给了我一些想法。 – user973067 2011-12-29 11:46:27

1

您正在混淆字典的数组。数组可以保存重复值。字典不能保存重复的键。

JSON响应是一个字典数组。您编写代码的方式,特别是[mutjson setObject:question_id forKey:question_type];似乎表明您只是使用字典。

如果您想检查每一个问题的问题类型,而不是尝试:

NSString *question_type; 

for (NSMutableDictionary *dict in dicjson) { 
    // I would suggest renaming dicjson to something more descriptive, like results 
    question_type = [dict objectForKey: @"question_type"]; 

    // Do what you would like now that you know the type 
} 
+0

谢谢,你的解释很清楚,现在我可以看到我很困惑。我也会用更多的描述性名字。 – user973067 2011-12-29 11:47:51