2010-02-16 73 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)