我有一个视图控制器,其上有一个表视图,对于该表视图的数据源,我使用包含两个键和两个值的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]
----------------------------------------
答案 0 :(得分:5)
这里没有什么问题。 NSDictionary是一个无序集合。说'#34;我添加它们的顺序"没有意义。
如果您想以特定顺序访问密钥,那么您必须在字典旁边存储数组或获取密钥,然后对它们进行排序并使用它来按顺序访问值。 / p>