【问题标题】:Adding NSArray to NSDictionary is causing problems将 NSArray 添加到 NSDictionary 会导致问题
【发布时间】:2010-07-09 15:43:43
【问题描述】:

我正在为 iOS 4 在 XCode 3.2.3 中编写一个应用程序。在我的代码中,我正在创建一个 NSDictionaries 的 NSArray,每个包含两个键/值对、一个字符串和一个 NSDictionaries 的 NSArray(有点令人困惑,我知道)。只是为了给你一个视觉,这里是结构:

<NSArray>
    <NSDictionary>
        <NSString/>
        <NSArray>
            <NSDictionary/>
            <NSDictionary/>
            ...
        </NSArray>
    </NSDictionary>
    ...
</NSArray>

奇怪的是,当我将一个新的 NSDictionary 添加到最里面的 NSArray 时,它似乎将相同的字典添加到包含在外部 NSDictionaries 每个 中的 NSArray。下面是我如何将最里面的 NSDictionary 添加到最里面的 NSArray:

[[outerDict objectForKey:@"innerArray"] addObject:innerDict];

所以,回顾一下,我想要的输出是这样的:

<outerArray>

    <outerDict1>
        <string>
        <innerArray1>
            <innerDict1>
            <innerDict2>
        </innerArray1>
    </outerDict1>

    <outerDict2>
        <string>
        <innerArray2>
            <innerDict3>
            <innerDict4>
        </innerArray2>
    </outerDict2>

<outerArray>

但我实际上得到的是:

<outerArray>

    <outerDict1>
        <string>
        <innerArray1>
            <innerDict1>
            <innerDict2>
            <innerDict3>
            <innerDict4>
        </innerArray1>
    </outerDict1>

    <outerDict2>
        <string>
        <innerArray2>
            <innerDict1>
            <innerDict2>
            <innerDict3>
            <innerDict4>
        </innerArray2>
    </outerDict2>

<outerArray>

注意,内部 NSDictionaries 被添加到 every innerArray。对于我的生活,我无法弄清楚为什么!

任何帮助将不胜感激,谢谢!

-马特

【问题讨论】:

  • 你能贴出创建整个outerArray的代码吗? [[outerDict objectForKey:@"innerArray"] addObject:innerDict]; 看起来正确。

标签: iphone objective-c xcode nsarray nsdictionary


【解决方案1】:

您需要发布更多代码。

[[outerDict objectForKey:@"innerArray"] addObject:innerDict];

仅在outerDict 中将innerDict 添加到innerArray,仅此而已。

也就是说,您可能已将相同的innerArray 两次放入两个不同的outerDict,如下所示:

NSMutableArray* innerArray=[NSMutableArray array];

[outerDict1 setObject:innerArray forKey:@"innerArray"];
[outerDict2 setObject:innerArray forKey:@"innerArray"];

这将 same innerArray 添加了两次,而不是两个独立的数组。那么,如果你修改outerDict1中的innerArray,那也会修改outerDict2中的innerArray,因为这两个是同一个数组。

【讨论】:

  • 哇,感谢您快速准确的回复!你是对的,我在每个 outerDict 中添加了相同的 innerArray 实例。问题解决了。
猜你喜欢
  • 1970-01-01
  • 2011-04-26
  • 1970-01-01
  • 2018-08-19
  • 1970-01-01
  • 2012-09-03
  • 1970-01-01
  • 1970-01-01
  • 2015-08-25
相关资源
最近更新 更多