0

NSMutableDictionaryにNSMutableArrayの値が入力される関数があります。このNSMutableArrayは、指の動きに基づいてCGPointを格納します。touchesEndedが呼び出されると、NSMutableArray内の値がNSMutableDictionaryに「転送」され、空になります。私はこれを、指の動きを追跡するためだけに(そして他の目的のために)行っています。

ここでの問題は、NSMutableArrayが空になると、NSMutableDictionaryも空になることです。

これは私のコードです:

[pointDict setObject:pointArr forKey:[NSNumber numberWithInt:i]];
//When I check if the pointDict is not empty, it works fine.
[pointArr removeAllObjects];
//Now when I check if the pointDict is not empty, it returns nothing.

なぜこれが起こっているのか誰かに教えてもらえますか?コードの何が問題になっていますか?

4

1 に答える 1

2

電話をかけるsetObject:forKey:ときは、指しているのと同じオブジェクトへのポインタを渡すだけですpointArr。したがって、配列にを指示すると、配列は1つしかないremoveAllObjectsため、すべてのポイントが失われます。

保存する前にコピーを作成する必要があります。ARCを使用していて、配列をに配置した後で配列を変更する必要がないと仮定すると、次のようpointDictに実行できます。

[pointDict setObject:[pointArr copy] forKey:[NSNumber numberWithInt:i]];

配列を変更可能に保つ必要がある場合は、mutableCopy代わりに使用できます。

ARCを使用していない場合は、コピーした配列をディクショナリに配置した後、それを使用releaseまたは解放する必要があります(新しいオブジェクトを作成するのと同様に、それを解放するのはあなたの責任です)。autoreleasecopyalloc

于 2012-07-23T07:21:05.247 に答える