Добавление NSArray к NSDictionary вызывает проблемы - PullRequest
0 голосов
/ 09 июля 2010

Я пишу приложение в XCode 3.2.3 для iOS 4. В своем коде я создаю NSArray из NSDictionaries, каждый из которых содержит две пары ключ / значение, строку и NSArray из NSDictionaries (что-то непонятно,Я знаю).Для наглядности приведем следующую структуру:

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

Что странно, так это то, что когда я добавляю новый NSDictionary во внутренний NSArray, он, кажется, добавляет тот же словарь в NSArray, содержащийся в каждый внешних словарей NS.Вот как я добавляю самый внутренний 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 Ответ

4 голосов
/ 09 июля 2010

Вам нужно разместить больше кода.

[[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, поскольку эти два массива одинаковы.

...