5

plist用来存储键值列表。当应用程序需要该列表时,尝试将列表加载到NSDictionary。一切都很好,直到这里。

这里我如何加载 plist 文件:

NSString *myPlistFilePath = [[NSBundle mainBundle] pathForResource: @"cities" ofType: @"plist"];
cities = [NSDictionary dictionaryWithContentsOfFile: myPlistFilePath];

当我们看时,cities是一个NSDictionary。然后我将所有列表键值推送到 TableView,不知何故它没有在 plist 文件中列出。随机排序。

有没有办法弄清楚?提前致谢。

4

3 回答 3

4

NSDictionary不是有序集合,也就是说,它不保证以任何方式保持内容的顺序。它的唯一功能是从键映射到值。

如果您需要订购的内容,您可以使用例如keysSortedByValueUsingSelector从 NSDictionary 中提取它,这将提取集合中的数据,按您的标准对其进行排序并将其存储在(保留顺序的)NSArray 中。

或者,考虑在 plist 的根目录中使用一个数组,其中包含一个有序的城市字典列表。然后,如果您遍历其中包含的数组,它们将按照 plist 中包含的数组顺序排列。

于 2013-01-16T11:25:03.463 回答
1

NSDictionary 不是有序的数据结构。

对象根据allKeys功能列出,键以未定义的方式列出。

有关功能,请参阅苹果文档allKeys

allKeys返回一个包含字典键的新数组。

  • (NSArray *)allKeys

返回值包含字典键的新数组,如果字典没有条目,则返回空数组。

讨论未定义数组中元素的顺序。

于 2013-01-16T11:25:14.170 回答
0

如果您希望避免使用选择器对键进行排序,请考虑在 plist 的根目录中使用 Array。然后,当您遍历数组时,将保留顺序。这运行 o(n),它比可能的最快排序算法短 log(n) 倍,
例如:

cities{
  list[
    city{}
    city{}
    city{}
    ...
  ]
}
于 2015-01-08T20:12:02.627 回答