在定义键值对时,如何确保键值对在 NSDictionary 中的位置?
例如,如果我定义:
[detailsView setDatasource: @[
@[@"Details",
@{ @"title_1":@"description1",
@"title_2":@"description2",
@"title_3":@"description3",
@"title_4":@"description4" }],
@[@"Actions",
@{ @"Action_1":[NSNull null],
@"Action_2":[NSNull null],
@"Action_3":[NSNumber numberWithBool:false] }]
];
然后在运行时我有不同的项目顺序
[detailsView setDatasource: @[
@[@"Details",
@{ @"title_2":@"description2",
@"title_3":@"description3",
@"title_4":@"description4",
@"title_1":@"description1" }],
@[@"Actions",
@{ @"Action_3":[NSNumber numberWithBool:false],
@"Action_1":[NSNull null],
@"Action_2":[NSNull null]}]
];
此行为无法预测...... 在使用文字初始化NSDictionary时如何初始化NSDictionary,是否有办法确保在使用文字时键值对将处于定义的位置?
- 编辑 -
不是一个出色的解决方案,但有效。我最终这样做了:
@[
@[ @"Route details",
@[
@[@"route-direction", @"Route direction", [NSString stringWithFormat:@"%@ → %@", journey[@"from"], journey[@"to"]]],
@[@"poi-count", @"Points of interest", journey[@"pois-count"]],
@[@"date-created", @"Date created", journey[@"created-at"]],
]
],
@[ @"Actions" ,
@[
@[@"favourite", @"Favourite", ( [journey objectForKey:@"favourite"] ? [journey objectForKey:@"favourite"] : [NSNumber numberWithBool:false])],
@[@"load",@"Load now",[NSNull null]],
@[@"delete",@"Delete",[NSNull null]],
]
],
[NSNumber numberWithInteger: indexPath.row]]];
答案 0 :(得分:0)
NSDictionary不是一个有序的容器。如果你使用它,你不应该关心数据的顺序。
如果您需要有序词典,请参阅此链接
http://www.cocoawithlove.com/2008/12/ordereddictionary-subclassing-cocoa.html
或者你可以写另一个NSArray/NSMutableArray
来保持这个NSDictionary的键顺序。
或者只使用NSArray而不是NSDictionary,一个数组保留键,另一个数组保留值
希望这可能会有所帮助