2013-05-15 75 views
1

我有一些JSON數據,我試圖把它放到一個NSDictionary。問題與NSDictionary基本功能

數據正在使用下面的代碼放到詞典:

NSDictionary *tempDict = [NSDictionary alloc]; 
tempDict = [NSJSONSerialization JSONObjectWithData:urlData 
              options:NSJSONReadingMutableContainers 
              error:&error]; 

我的問題是,當我嘗試運行我期望找回我得到一個異常數據。該代碼是:

NSLog([tempDict valueForKey:@"key"]); 

所以我使用的代碼做了我自己的字典:

NSDictionary *test = [[NSDictionary alloc]initWithObjectsAndKeys:@"teststring",@"1",@"teststring2",@"2", nil]; 
    NSLog([test valueForKey:@"1"]); 

這工作得很好。所以我看着調試器,發現兩個字典之間有區別。

tempDict NSDictionary * 0x0920c190 
    [0] id 0x0920c150 <---- 
     [0] key/value pair 
      key id 0x0920c100 
      value id 0x0920bf00 
     [1] key/value pair 
      key id 0x0920c120 
      value id 0x0920c140 

和:

test NSDictionary * 0x0920c260 
    [0] key/value pair 
     key id 0x0003a430 
     value id 0x0003a420 
    [1] key/value pair 
     key id 0x0003a450 
     value id 0x0003a440 

我不清楚它爲什麼是這樣做的。是否有人能夠闡明這種情況,並建議我如何在NSDictionary tempDict中訪問KVP?

+0

你可以用NSLog(@「tempdict%@」,[tempdict description]);'輕鬆地輸出一個字典。看起來比調試輸出更好。 –

回答

2

看起來像您的JSON文件中的根對象是一個包含單個元素(字典)的數組。試試這個:

NSArray *array = [NSJSONSerialization JSONObjectWithData:urlData 
               options:NSJSONReadingMutableContainers 
                error:&error]; 
NSDictionary *tempDict = array[0]; 

注:發送的alloc一個對象沒有直接init很少(如果有的話),你想要做什麼。可以使用alloc/init來返回引用計數爲1的對象,也可以使用返回自動釋放對象的類方法,如JSONObjectWithData:...

+0

謝謝你的工作。我明白我做錯了什麼。謝謝。 – Jamesla