2011-12-29 104 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