NSDictionary的allKeys数组搞砸了,而不是按字典中的顺序排列?

在我的项目中,我从一个.plist中更具体地从NSDictionary中提取数据。 我用.plist的内容创build了一本字典,效果很好。 当我那么做

NSArray *array = [dict allKeys]; 

它用所有的键填充数组,但是以完全随机的顺序,与.plist文件中的顺序不同。 我真的需要保持秩序。 字典中的键是数组,如果这可能会导致问题。 我没有得到什么?

提前感谢!

就像NSSet中的项目之间没有顺序一样,NSDictionary中的键值对没有固有的顺序。

如果你想按特定的顺序键,你需要使用类似于- (NSArray *)keysSortedByValueUsingComparator:(NSComparator)cmptr但不会给出在plist文件中序列化NSDictionary的顺序。

没有这样的内部方法可以从中获得这个。 但一个简单的逻辑工作给你。 在准备词典时,您可以在每个键的前面简单地添加几个数字文本。 喜欢

 NSDictionary *dict = [[NSDictionary alloc] initWithObjectsAndKeys: @"01.Created",@"cre", @"02.Being Assigned",@"bea", @"03.Rejected",@"rej", @"04.Assigned",@"ass", @"05.Scheduled",@"sch", @"06.En Route",@"inr", @"07.On Job Site",@"ojs", @"08.In Progress",@"inp", @"09.On Hold",@"onh", @"10.Completed",@"com", @"11.Closed",@"clo", @"12.Cancelled", @"can", nil]; 

现在,如果您可以使用sortedArrayUsingSelector同时获取所有键在您放置的顺序。

  NSArray *arr = [[dict allKeys] sortedArrayUsingSelector:@selector(localizedStandardCompare:)]; 

在你想在UIView中显示按键的地方,只要切掉前面的3个字符。

正如Qwerty Bob所说的,NSDictionary不sorting其内容。 如果您需要坚持一个订单的密钥,一种方法是将单独的数组存储在.plist文件中。 然后,枚举数组并使用它来按顺序访问字典值。

你可以按照你想要的顺序用Dictionary键创build一个NSArray。

尝试这个:

 NSArray *array = [dict allKeys]; NSSortDescriptor *descriptor = [[NSSortDescriptor alloc] initWithKey:@"self" ascending:NO]; NSArray *descriptors = [NSArray arrayWithObject:descriptor]; NSArray *orderedKeys = [array sortedArrayUsingDescriptors:descriptors];