plist中的NSdictionary对象需要是数组的数组,怎么转换?

Posted

技术标签:

【中文标题】plist中的NSdictionary对象需要是数组的数组,怎么转换?【英文标题】:NSdictionary object in plist needs to be a array of arrays, how to convert? 【发布时间】:2010-06-28 19:39:48 【问题描述】:

我有一个字典 .plist,其中有一个子数组,但是在 Json 中的转换过程中转换为一个数组。项目在下图中为“profile”,如您所见,它是一个字典,我如何以编程方式将其转换为数组”:

alt text http://www.baublet.com/images/dict2.png

我还希望字典中的项目具有项目 0、项目 1 等,因此完成后看起来像这样,因此我可以在向下钻取 UItable 中使用它。

alt text http://www.baublet.com/images/array4.png

感谢您对问题的反馈,我重新编写了它。

迈克尔

【问题讨论】:

为什么需要将其转换为数组?您将丢失密钥中编码的信息。如果信息由键构成,则通常需要键。 【参考方案1】:

鉴于字典包含一系列键/值对,将其转换为数组甚至意味着什么还不清楚。同样,您还没有说要对数组做什么。

您只想要值吗?您是否需要按键、值、键、值的顺序排列它们?他们需要按某种顺序排列吗?你想让数组替换字典吗?数组本身需要吗?


鉴于您正在进行的重写程度,我建议创建一个容器——NSMutableDictionary 或 NSMutableArray,视情况而定——然后沿着现有容器向下走,以任何你需要的形式在可变容器中插入新项目。

使用for (... in ...) 枚举字典和数组会很简单。

只要您继续使用在原始字符串中找到的字符串值——没有理由复制它们——那么内存使用量就不会非常惊人。

相关文档:

http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/Collections/Collections.html#//apple_ref/doc/uid/10000034i

http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/PropertyLists/Introduction/Introduction.html#//apple_ref/doc/uid/10000048i

【讨论】:

我是新手,你能指出我学习枚举的正确方向吗?感谢您的宝贵时间。 这太棒了..显然我需要做这个阅读。如何在两个答案上打勾?【参考方案2】:

单击类型列中的“字典”值并将其更改为“数组”。

【讨论】:

【参考方案3】:

要丢弃字典的键并只获取值,请使用allValues

【讨论】:

订单将是未指定的。【参考方案4】:

假设您将items 初始化为 NSMutableArray,以下是处理此问题的最简单方法:

NSDictionary *profile;
NSArray *pArray;
for (NSMutableDictionary *anItem in items) 
    profile=[anItem valueForKey:@"profile"];
    pArray=[NSArray arrayWithObjects:[profile valueForKey:@"car"],[profile valueForKey:@"color"],[profile valueForKey:@"make"],nil];
    [anItem setValue:pArray forKey:@"profile"];

这将确保创建的数组的顺序始终相同。

但是,我不得不说,我认为您很少会遇到必须将嵌套字典转换为数组的情况。对于 tableview,您当然不需要这样做。

【讨论】:

据我了解,您需要配置文件中的“项目 0”、“项目 1”格式,以便我可以推送到新的视图控制器,我看到的所有示例都有这种格式推送风景。我错了吗? 现在您不需要它来显示表格视图。你根本不需要数组。 “Item 0”、“Item 1”只是 plist 编辑器显示数组的方式,以便您可以按顺序查看元素。它们不会出现在实际的操作数组中。对于表格视图,您需要有序数据,通常您为此创建一个数组,但不要求您以这种方式存储数据。如果您愿意,可以动态创建表示表格行的数组。这就是 Core Data 的处理方式。 好的,我得研究一下……每一个向下钻取或 UItableview 的示例都使用具有“项目 0,项目 1”格式的字典或数组。没有这些,我的钻取不会加载。我会做一些阅读。谢谢。

以上是关于plist中的NSdictionary对象需要是数组的数组,怎么转换?的主要内容,如果未能解决你的问题,请参考以下文章

将 NSDictionary 写入我的应用程序包中的 plist

从 swift 2 中的 plist 读取时无法创建 NSDictionary

如何使用 Swift 将新数组数据添加到 plist 文件中的 NSDictionary

从 plist 中获取数组中的字典对象的问题

将 NSDictionary 保存到 plist

如何在 PLIST 中访问嵌套的 NSDictionary?