Mar*_*man 5 iphone nsdictionary plist nsarray ios
在我的项目中,我从.plist中提取数据,更具体地说是从NSDictionary中提取数据.我使用.plist的内容初始化一个字典,效果很好.当我这么做的时候
NSArray *array = [dict allKeys];
Run Code Online (Sandbox Code Playgroud)
它用所有键填充数组,但是以完全随机的顺序填充,与.plist文件中的顺序不同.我真的需要保留订单.字典中的键是数组,如果这可能会导致问题.我得不到什么?
非常感谢提前!
小智 7
就像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];
Run Code Online (Sandbox Code Playgroud)
现在,如果您可以使用sortingArrayUsingSelector,同时获得与您放置的顺序相同的所有键.
NSArray *arr = [[dict allKeys] sortedArrayUsingSelector:@selector(localizedStandardCompare:)];
Run Code Online (Sandbox Code Playgroud)
在你想要在UIView中显示键的地方,只需砍掉正面3字符即可.