NSDictionary allKeys和allValues订单更改

时间:2014-11-12 00:23:12

标签: ios objective-c nsdictionary

我有一个视图控制器,其上有一个表视图,对于该表视图的数据源,我使用包含两个键和两个值的NSDictionary。我使用对象文字初始化字典,并且我还有一个NSArray,其中包含的值应该与字典中的值相对应。

NSDictionary *dict = @{@"Key1" : @"Value1", @"Key2" : @"Value2"};
NSArray *arr = @[@"Value for Key 1", @"Value for Key 2"];

在我的表格视图cellForRowAtIndexPath:中,我有以下

static NSString *cellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
if (!cell)
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:cellIdentifier];

cell.textLabel.text = dict.allKeys[indexPath.row];
cell.imageView.image = dict.allValues[indexPath.row];
cell.textLabel.numberOfLines = 0;

return cell;

但是,无论我初始化dict的顺序(可能是@{@"Key2" : @"Value2", @"Key1" : @"Value1"}),值2总是先行。这会导致我向字典添加更多对象时出现问题,因为arr中的索引必须与dict中的索引匹配,此问题也会使表格视图的显示方式与我想要它。有谁知道这里出了什么问题?

为了帮助可视化问题,这是一个演示

的图表
NSDictionary *dict = @{@"Key1" : @"Value1", @"Key2" : @"Value2"};
----------------------------------------
Table view
----------------------------------------
  [Value 2] [Key 2]
----------------------------------------
  [Value 1] [Key 1]
----------------------------------------
//if I change the order in the dictionary, the order in the table view remains the same
NSDictionary *dict = @{@"Key2" : @"Value2", @"Key1" : @"Value1"};
----------------------------------------
Table view
----------------------------------------
  [Value 2] [Key 2]
----------------------------------------
  [Value 1] [Key 1]
----------------------------------------

1 个答案:

答案 0 :(得分:5)

这里没有什么问题。 NSDictionary是一个无序集合。说'#34;我添加它们的顺序"没有意义。

如果您想以特定顺序访问密钥,那么您必须在字典旁边存储数组或获取密钥,然后对它们进行排序并使用它来按顺序访问值。 / p>