0

配列をディクショナリに追加してから、配列からすべてのオブジェクトを削除します。ディクショナリを印刷すると、空でも表示されます。ディクショナリに存在する配列データも削除されることを意味します。

if ([[[testMenuGroupAry objectAtIndex:0]objectAtIndex:group] isEqualToString:[filteredAry objectAtIndex:objCount]])
    {
        NSLog(@"object count is %d",objCount);
        [groupAry addObject:[array1 objectAtIndex:group]];
    }

    [tempDict setValue:groupAry forKey:[filteredAry objectAtIndex:objCount]];
    [groupAry removeAllObjects];

    NSLog(@"before Dictionary temp Dict : %@",tempDict);

tempdict も空を示しています。

4

4 に答える 4

1

すべての要素を削除したためです。オブジェクトをコレクションに追加しても、オブジェクトはコピーされず、インスタンスが保持されるだけです。

于 2013-05-16T10:45:28.390 に答える
1

これは、ディクショナリが配列への参照のみを格納するために発生します。配列全体をコピーするわけではありません。できることは、最初に配列をコピーしてから辞書に保存することです。

于 2013-05-16T10:45:50.570 に答える
0

このコード行を変更します。

[groupAry addObject:[array1 objectAtIndex:group]];

[groupAry addObject:[[array1 objectAtIndex:group] mutableCopy]];

これにより、オブジェクトが保持され、配列が nil になることはありません。

于 2013-05-16T10:48:34.160 に答える
0

tempdict を空にしない場合。これを行う必要があります: [tempDict setValue:[NSMutableArray arrayWithArray:groupAry] forKey:[filteredAry objectAtIndex:objCount]]; groupAry のコピーを作成します。

于 2013-05-16T10:50:14.787 に答える