将NSArray添加到NSDictionary会导致问题

时间:2010-07-09 15:43:44

标签: iphone objective-c xcode nsarray nsdictionary

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

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

奇怪的是,当我向最内层的NSArray添加一个新的NSDictionary时,它似乎将相同的字典添加到外部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已添加到每个 innerArray。对于我的生活,我无法弄清楚为什么!!

非常感谢任何帮助,谢谢!

-Matt

1 个答案:

答案 0 :(得分:4)

您需要发布更多代码。

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

仅将innerDict添加到innerArray中的outerDict,而不是其他内容。

那就是,您可能会将相同的innerArray两次放入两个不同的outerDict中,如下所示:

NSMutableArray* innerArray=[NSMutableArray array];

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

这会两次添加相同 innerArray,而不是两个独立数组。然后,如果您修改innerArray中的outerDict1,那么也会修改innerArray中的outerDict2,因为这两个是相同的数组。