2010-02-16 134 views
31

我有一個NSDictionary看起來像:NSDictionary到NSArray?

{ 
"Item1" = 2.4; 
"Item2" = 5.5; 
"Item3" = 15.6; 
} 

要在表視圖我必須把它轉移到一個NSArray使用NSDictionary項目,對嗎?

所以我嘗試:

NSDictionary *dict = [myDict objectForKey:@"items"]; 

for (id item in dict) { 
    [_myArray addObject:[dict objectForKey:item]]; 
} 

但_myArray一直是空的?我究竟做錯了什麼?

回答

27

撇開技術問題與您發佈的代碼,你問這個:

要使用這個字典中的項目表視圖我必須把它轉移到一個NSArray的,對嗎?

答案是:不一定。對於UITableView,UITableViewDataSourceUITableViewDelegate機器沒有任何內在機制,這意味着您的數據必須位於數組中。您將需要實現各種方法來告訴系統表中有多少行,以及每行中顯示了哪些數據。許多人發現用像數組這樣的有序數據結構來回答這些問題要更加自然和高效。但是,您沒有要求的。如果您可以編寫代碼以使用您開始使用的字典來實現這些方法,請隨時取消!

+2

我知道這是一箇舊帖子,但先生,你猜我的想法! – Bogdan 2014-08-26 20:28:49

2

在這裏可能會發生一些事情。

是您列出的字典myDict?如果是這樣,那麼你沒有一個密鑰爲@"items"的對象,並且dict變量將爲零。您需要直接遍歷myDict

要檢查的另一件事是如果_myArray是一個NSMutableArray的有效實例。如果它爲零,則addObject:方法將自動失敗。

最後要檢查的是,字典中的對象被正確包裝在NSNumbers(或其他非原始類型)中。

+0

沒有,myDict不是上面的例子中,它應該告訴你,我有NSDictionarys的NSDictionary的。 我如何檢查我的對象是否是NSNumbers? – phx 2010-02-16 16:12:37

+0

對不起,我的錯!我濫用「addObject」。 我想添加NSDictionarys的對象到我的數組!所以我必須以另一種方式來做! – phx 2010-02-16 16:18:17

221
NSArray * values = [dictionary allValues]; 
+0

嘿, 我想將對象添加到數組中,而不僅僅是值。 – phx 2010-02-16 16:13:24

+24

如果您閱讀文檔,allValues會返回每個對象,這些對象將通過爲字典中的每個鍵調用'objectForKey:'返回。 – 2010-02-16 16:42:35

+3

如果你想添加更多的對象,你需要使這一個NSMutableArray像這樣: '的NSMutableArray *值= [[NSMutableArray的頁頭] initWithArray:字典allValues];' – 2013-05-18 16:26:57

0

要獲得在字典中的所有對象,你也可以使用enumerateKeysAndObjectsUsingBlock:像這樣:

NSMutableArray *yourArray = [NSMutableArray arrayWithCapacity:6]; 
[yourDict enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) { 
    [yourArray addObject:obj]; 
}]; 
42
NSArray *keys = [dictionary allKeys]; 
NSArray *values = [dictionary allValues]; 
+0

這兩個將允許您將NSDictionary的鍵和值分割爲兩個單獨的NSArrays。很有幫助。 – 2013-12-03 20:42:38

5

您可以創建字典裏面的所有對象的數組,然後用它作爲數據源TableView。

NSArray *aValuesArray = [yourDict allValues]; 
3

代碼Snippet1:

NSMutableArray *array = [[NSMutableArray alloc] init]; 
NSArray * values = [dictionary allValues]; 
[array addObject:values]; 

代碼Snippet2:如果你想添加更多

[array addObject:value1]; 
[array addObject:value2]; 
[array addObject:value3]; 

等等

您還可以存儲密鑰值字典到arr唉

NSArray *keys = [dictionary allKeys]; 
1

你只需要初始化你的NSMutableArray

NSMutableArray *myArray = [[NSMutableArray alloc] init]; 
+0

爲我工作!謝謝 :) – 2017-03-01 05:11:34

0

此代碼實際上是用來值的dictionarythrough將數據添加到Array按照Key

NSMutableArray *arr = [[NSMutableArray alloc]init]; 
NSDictionary *dicto = [[NSMutableDictionary alloc]initWithObjectsAndKeys:@"Hello",@"StackOverFlow",@"Key1",@"StackExchange",@"Key2", nil]; 
NSLog(@"The dictonary is = %@", dicto); 
arr = [dicto valueForKey:@"Key1"]; 
NSLog(@"The array is = %@", arr); 
0

在斯威夫特4:

let dict = ["Item1":2.4, "Item2": 5.4, "Item3" : 6.5] 

let array = Array(dict.values)