2017-08-01 53 views
-2

我有一個NSArray,看起來像下面遍歷對象的NSArray有沒有id的 - 目標C

[{ 
    "Id":"456", 
    "Type":"Dog", 
    "Sound":"Bark", 
}, 
{ 
    "Id":"789", 
    "Type":"Cat", 
    "Sound":"Meow", 
}] 

我嘗試以下

for (id key in array) { // Doesn't work 
    NSLog(@"%@", key[@"Type"]); 
} 

,我試圖

NSLog(@"%@", [array firstObject]); // Doesn't work 

但是這不起作用,因爲沒有id可以訪問。兩個都得到了NSInvalidArgumentException。我將如何成功地遍歷我擁有的兩個對象並打印出該類型?

+0

看起來你的數組變量不是NSArray的子​​類。添加breakepoint並檢查它。 – antonsergeev88

+2

是的,你的代碼看起來很好。陣列如何設置?你怎麼知道內容是什麼?發佈該代碼,你會更有可能得到一個有用的答案。 –

+2

如果'[array firstObject]'給你一個'NSInvalidArgumentException',那麼'array'不是'NSArray'。閱讀錯誤信息並查看實際情況。 –

回答

1

這是一個有點混亂,因爲你說:

I have an NSArray that looks like the following 

[{ 
    "Id":"456", 
    "Type":"Dog", 
    "Sound":"Bark", 
}, 
{ 
    "Id":"789", 
    "Type":"Cat", 
    "Sound":"Meow", 
}] 

但後來,你也說:

的NSLog(@ 「%@」,[陣列firstObject] ); //不起作用

當然,你不指出​​什麼「不工作」的意思是......它會拋出一個錯誤嗎?它什麼都不輸出?它輸出的是什麼,但不是你所期望的?

但是,如果您沒有有一個數組,「看起來像」,那麼讓我們來看看它實際上是什麼...

我們可以把字典爲:

{ key1:value1, key2:value2, key3:value3, etc... } 

我們可以想像,一個數組爲:

[object1, object2, object3, etc...] 

因此,假設您的示例數據結構化就像有效的NSArray那樣,這意味着你有一個2個字典對象的數組。如果你想將它們輸出到控制檯,你可以這樣做:

// log the first object in the array 
NSLog(@"%@", [array firstObject]); 

和輸出應該是一個字典:

{ 
    Id = 456; 
    Sound = Bark; 
    Type = Dog; 
} 

你也可以這樣做:

// for each element (each Dictionary) in array, output the dictionary 
for (NSDictionary *d in array) { 
    NSLog(@"%@", d); 
} 

產生於:

...[1234:4321] { 
    Id = 456; 
    Sound = Bark; 
    Type = Dog; 
} 

...[1234:4321] { 
    Id = 789; 
    Sound = Meow; 
    Type = Cat; 
} 

,最後:

// for each element (each Dictionary) in array 
for (NSDictionary *d in array) { 
    // for each Key in each Dictionary 
    for (NSString *key in [d allKeys]) { 
     NSLog(@"%@ - %@", key, d[key]); 
    } 
} 

,這將給你:

...[1234:4321] Sound - Bark 
...[1234:4321] Id - 456 
...[1234:4321] Type - Dog 
...[1234:4321] Sound - Meow 
...[1234:4321] Id - 789 
...[1234:4321] Type - Cat 

注意詞典是*未排序的,所以不要指望每次按照相同的順序逐個按鍵。

希望是有道理的。當然,如果你不這樣做,你仍然需要找出爲什麼你認爲你有一個NSArray。

+0

謝謝,我得到的錯誤是「終止應用程序由於未捕獲的異常'NSInvalidArgumentException',原因:' - [__ NSCFString firstObject]:無法識別的選擇發送到實例0x600000253e00' 」,這導致我認爲你是正確的時候說它不是一個NSArray。但是爲什麼我能夠創建一個看起來像這樣的NSArray呢?如果我有一個NSDictionary看起來是一樣的,那也是不正確的? –

+0

你是什麼意思*「看起來像這樣」*?你怎麼看「那個」?你如何創建你正在看的任何對象?它來自哪裏? – DonMag