2012-08-26 36 views
1

我正在爲我的UiTableView的每個單元格獲取以下NSDictionary。我必須能夠鑽取下面的資產子結構中的第一個id值。如何深入下面的NSDictionary?

{ 
    assets =  (
       { 
      "chunk_size" = 262144; 
      file =    { 
       "is_dirty" = 0; 
       "mongo_grid_f_s_file" =     { 
        file =      { 
         "_id" =       { 
          "$id" = 503a58e09b41648f69000001; 
         }; 
         chunkSize = 262144; 
         filename = "/private/var/tmp/phpPPZsUf"; 
         length = 5849; 
         md5 = 5f2700f4d953ef866fe1d4967f9965fb; 
         name = Image1; 
         uploadDate =       { 
          sec = 1346001120; 
          usec = 819000; 
         }; 
        }; 
        gridfs =      { 
         chunks =       { 
          w = 1; 
          wtimeout = 10000; 
         }; 
         "chunks_name" = "assets.chunks"; 
         "files_name" = "assets.files"; 
         w = 1; 
         wtimeout = 10000; 
        }; 
       }; 
      }; 
      id = 503a58e09b41648f69000001; 
      length = 5849; 
      md5 = 5f2700f4d953ef866fe1d4967f9965fb; 
      name = Image1; 
      "upload_date" = "0.81900000 1346001120"; 
     }, 
       { 
      "chunk_size" = 262144; 
      file =    { 
       "is_dirty" = 0; 
       "mongo_grid_f_s_file" =     { 
        file =      { 
         "_id" =       { 
          "$id" = 503a58e09b41648f69000004; 
         }; 
         chunkSize = 262144; 
         filename = "/private/var/tmp/phphxvI3H"; 
         length = 1551; 
         md5 = f193ffe87eb0138608a206dcf72bf704; 
         name = Image2; 
         uploadDate =       { 
          sec = 1346001120; 
          usec = 841000; 
         }; 
        }; 
        gridfs =      { 
         chunks =       { 
          w = 1; 
          wtimeout = 10000; 
         }; 
         "chunks_name" = "assets.chunks"; 
         "files_name" = "assets.files"; 
         w = 1; 
         wtimeout = 10000; 
        }; 
       }; 
      }; 
      id = 503a58e09b41648f69000004; 
      length = 1551; 
      md5 = f193ffe87eb0138608a206dcf72bf704; 
      name = Image2; 
      "upload_date" = "0.84100000 1346001120"; 
     } 
    ); 
    coordinates =  { 
     latitude = "37.78584"; 
     longitude = "-122.4064"; 
    }; 
    "created_at" = "2012-08-26T12:12:00-0500"; 
    id = 503a58e09b4164cf5a00000a; 
    "number_of_cars" = 1; 

} 

我曾嘗試以下:

NSDictionary * classifiedAssets = [classified objectForKey:@"assets"]; 

然後讓每個ID,我已經做了:

[classifiedImages objectForKey:@"id"] 

但是,所有我得到的是:

(503a58e09b41648f69000001, 503a58e09b41648f69000004) 

我希望能找回一個va的NSArray rious ID而不是括號逗號分隔列表。

任何提示?

回答

2

我想你可能已經有了你所需要的東西;和這裏的解釋:

NSDictionary * classifiedAssets = [classified objectForKey:@"assets"]; 

不正是你所期望的:你可以認爲這是一個NSDictionary(由於您的變量的類型),但它實際上是一個NSArray(由於括號中JSON而不是花括號)。然後這樣的:

[classifiedImages objectForKey:@"id"] 
// by which I *assume* you mean: 
[classifiedAssets valueForKey:@"id"] 

實際上正在NSArrays的漂亮的功能優勢:在一個NSArray調用valueForKey:給你每個成員上調用valueForKey:結果的一個NSArray。

我假設你正在談論NSLog系列中的parens和逗號。在這種情況下,用逗號分隔的一套東西用括號包圍表示一個NSArray(嘗試登錄它的class看看)

+0

遺憾的新手問題,但你怎麼日誌類? – jini

+0

其實,你不能在數組上調用'objectForKey'。你可能的意思是'valueForKey' – Alladinian

+1

@jini'NSLog(@「%@」,[someObj class]);' –

1

爲了讓您的資產ID的數組,你可以做這樣的事情:

// Assuming that 'classified' is the dictionary you have posted 
NSArray *ids = [classified valueForKeyPath:@"assets.id"]; 

現在,是關於valueForKeyPath有趣的是,它可以讓同時爲每個對象調用valueForKey你向下鑽取通過點符號的對象,如果遇到NSArray

+0

[分類valueForKeyPath:@ 「assets.id」]仍然得到我的( 503a58e09b41648f69000001, 503a58e09b41648f69000004 ) – jini

+0

這是你問什麼......一個'NSArray'與IDS :)(你得到它糾正作爲@ctrahey建議的第一位,我只想指出一個更方便/簡化的方式) – Alladinian