从列出的 Plist 加载 NSDictionary
Posted
技术标签:
【中文标题】从列出的 Plist 加载 NSDictionary【英文标题】:Loading NSDictionary from Plist as Listed 【发布时间】:2013-01-16 11:17:02 【问题描述】:我使用plist
来存储键值列表。当应用程序需要该列表时,尝试将列表加载到 NSDictionary。到这里为止一切都很好。
这里我如何加载 plist 文件:
NSString *myPlistFilePath = [[NSBundle mainBundle] pathForResource: @"cities" ofType: @"plist"];
cities = [NSDictionary dictionaryWithContentsOfFile: myPlistFilePath];
当我们查看时,cities
是 NSDictionary
。然后我将所有列表键值推送到 TableView,不知何故它没有在 plist 文件中列出。随机排序。
有办法解决吗? 提前致谢。
【问题讨论】:
您找到解决方案了吗?我也遇到了同样的问题 【参考方案1】:NSDictionary 不是有序集合,也就是说,它不保证以任何方式保持内容的顺序。它的唯一功能是从键映射到值。
如果您需要订购的内容,您可以使用例如keysSortedByValueUsingSelector 从 NSDictionary 中提取它,这将提取集合中的数据,按照您的标准对其进行排序并将其存储在(保留顺序的)NSArray 中。
或者,考虑在 plist 的根目录中使用一个数组,其中包含一个有序的城市字典列表。然后,如果您遍历其中包含的数组,它们将按照 plist 中包含的数组顺序。
【讨论】:
感谢您的开创性回答。【参考方案2】:NSDictionary 不是有序的数据结构。
对象根据allKeys
函数列出,键以未定义的方式列出。
查看苹果文档以了解allKeys
函数。
allKeys 返回一个包含字典键的新数组。
(NSArray *)allKeys返回值 一个包含字典键的新数组,或者一个空的 如果字典没有条目,则为数组。
讨论数组中元素的顺序没有定义。
【讨论】:
感谢您的回答,那么您有什么建议按列表加载?【参考方案3】:如果您希望避免使用选择器对键进行排序,请考虑在 plist 的根目录中使用 Array。然后,当您遍历数组时,将保留顺序。这运行 o(n),它比可能的最快排序算法短 log(n) 例如:
cities
list[
city
city
city
...
]
【讨论】:
以上是关于从列出的 Plist 加载 NSDictionary的主要内容,如果未能解决你的问题,请参考以下文章