2012-02-10 97 views
1

我有一個NSDictionary的變量以下數據:的NSDictionary問題

{ 
    value = "TV-PG"; 
} 

我想知道如何獲得價值的關鍵「價值」在這裏。

我想:

 NSDictionary *fieldMaturityRating = [[parsedItems objectAtIndex:0] objectForKey:@"field_maturity_rating"]; 

     NSString *dateRelease = [fieldMaturityRating objectForKey:@"value"]; 

(其中,fieldMaturityRating與給定的值的NSDictionary),我 並獲得:

-[__NSArrayM objectForKey:]: unrecognized selector sent to instance 0xd9cd3f0 
[10530:707] *** Terminating app due to uncaught exception: -[__NSArrayM objectForKey:]: unrecognized selector sent to instance 0xd9cd3f0 

誰能好心幫我嗎? 謝謝。

注:如果我暫停執行,並做了po後的代碼一號線這裏介紹的,我得到如下:

(gdb) po fieldMaturityRatingNew 
<__NSArrayM 0x79af250>( 
{ 
    value = "TV-PG"; 
} 
) 

回答

4

po真實地反映了你的問題:

(gdb) po fieldMaturityRatingNew 
<__NSArrayM 0x79af250>( 
{ 
    value = "TV-PG"; 
} 
) 

()意味着你的對象實際上是一個數組。

裏面是{}表示您的字典。

所以,你真的想:

NSString *value = [[fieldMaturityRatingNew objectAtIndex:0] objectForKey:@"value"]; 
2

這意味着你的fieldMaturityRating實際上不是一個NSDictionary。確保你沒有將它設置到代碼中的某個數組。

編輯:

這意味着你的fieldMaturityRating實際上是包含一個NSDictionary一個NSArray。如果這是你想要的數據結構,那麼你可以像這樣訪問你的價值。

NSString *dateRelease = [[fieldMaturityRating objectAtIndex:0] objectForKey:@"value"]; 

我不相信這是你想要的數據結構,所以你應該看看爲什麼你的parsedItems返回數組你一個NSArray而不是一個NSDictionary的。如果你追蹤這個問題,你可以在將來避免任何麻煩。

+0

與改變name..didnt工作試過.. 。它是一個局部變量.. :( – Ahsan 2012-02-10 23:05:13

+0

跟蹤你使用該變量的地方,並檢查是否給它分配一個數組。 – 2012-02-10 23:09:46

+0

我更新了我的答案。你應該真正弄清楚爲什麼你的parsedItems數組沒有填充你的數據我期待着。 – 2012-02-11 00:08:46

2

實際上,您將該NSDictionary消息發送到NSMutableArray實例。

您可能想再次檢查您的代碼,因爲objectForKey:方法在指向NSDictionary時是正確的。

0

根據您的數據結構這是一個陣列內的字典,dateRelease應該是這樣的

NSString *dateRelease = fieldMaturityRating[0][@"value"];