【问题标题】:NSArray from array in NSDictionaryNSDictionary 中数组中的 NSArray
【发布时间】:2011-07-28 17:25:41
【问题描述】:

我有一个从远程 PList 加载的 NSDictionary。 它包含一个字典数组:

(
    {
    id = "1234";
    count = "45";
    },
    {
    id = "244";
    count = "89";
    },
    {
    id = "9909";
    count = "123";
    }
)

如何将它放入 NSArray?我不希望每个键都有单独的数组。 我只想要一个 NSDictionary 的 NSArray。

可能有一个简单的答案,但这一直困扰着我。

谢谢

【问题讨论】:

  • 这是什么“它包含字典数组:我只想要一个 NSDictionary 的 NSArray”。
  • 您所拥有的是一组名称-值对。字典非常擅长保存和操作名称-值对,所以也许这就是您想要做的——将 NVPairs 列表导入字典?如果不是,那么我认为您可能想更好地解释“NSDictionary 的 NSArray”是什么意思。
  • PList 看起来像这样:<array> <dict> <key>id</key> <real>1234</real> <key>count</key> <real>123</real> </dict> <dict> <key>id</key> <real>223</real> <key>count</key> <real>2</real> </dict> <dict> <key>id</key> <real>777</real> <key>count</key> <real>15523</real> </dict> </array> 创建的 NSDictionary 的根元素是一个没有键的数组。我试图弄清楚如何将此数组放入 NSArray。如果我用一个键添加这个数组,我可以使用 objectForKey 来获取 NSArray。

标签: objective-c nsarray plist nsdictionary


【解决方案1】:

你说你有一个包含数组的字典。不管数组的键是什么,只要问[dictionary objectForKey:theKey],你就会得到数组。

编辑:从您的 cmets 来看,听起来您只有一个 NSArray,它根本不是 NSDictionary 中的 。如果是这样,您已经拥有了您正在寻找的东西。

【讨论】:

  • 数组没有键。那就是问题所在。 :s
  • @Ty Kroll:那么您就没有“从远程 PList 加载的 NSDictionary ... [包含字典数组的]”。字典中的所有内容都有一个键。如果没有它的键,它不在字典中。所以问题是:如果不是字典,你实际上有什么?
  • 这确实很奇怪。我使用 NSPropertyListSerialization propertyListFromData:mutabilityOption:format:error 从具有上述格式的远程 PList 加载 NSData。也许它应该把我从自己身上救出来。我肯定有很多字典。打印生成的 NSDictionary 显示的内容与我在第一篇文章中显示的内容相似。
  • @Ty Kroll:你试过问对象它的类是什么吗?听起来你只有一个 NSArray。
  • 哇! __NSCFArray。疯狂的。只需将其转换为 NSArray* 就可以了。很好奇为什么当它实际上是一个 NSArray* 时,我可以将它作为一个 NSDictionary* 传递出去。
【解决方案2】:

怎么样:

NSArray *dicts = [NSPropertyListSerialization propertyListWithData:data
                                                           options:0
                                                            format:NSPropertyListOpenStepFormat
                                                             error:NULL];

请注意,这是一种已弃用的 plist 格式(现在首选 XML 或二进制格式)。

【讨论】:

  • 这仅在 >= XCode 4 中可用吗?
  • 没有,很久了。
【解决方案3】:

你试过 [字典 objectAtIndex:0]objectAtIndex:0]。尝试在外循环中迭代 objectAtIndex。

一切顺利。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-29
    • 2015-10-25
    • 1970-01-01
    • 2014-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多