2012-05-10 9 views
0

私はNSMutableArrayにオブジェクトを追加しようとしていますが、重複しているようです。オブジェクトがNSMutableArrayで複製される

@interface TestObject : NSObject { 
    double a_actual; 
    double a_target; 
} 
@property(assign) double a_actual; 
@property(assign) double a_target; 

作成いくつかのポインタ:それらのInit

NSMutableArray * myTestObjectArray; 
TestObject * myTestObject; 

myTestObjectArray = [[NSMutableArray alloc] init]; 
myTestObject = [[TestObject alloc] init]; 

私がオブジェクトに値を追加し、アレイに追加します。私は追加

[myTestObject setA_actual:234]; 
[myJointDataArray insertObject:myTestObject]; 

各オブジェクトに異なる値が、私は常にすべての変数を埋める。 私は各オブジェクトを印刷するとき、何らかの理由ですべてのオブジェクトに同じ(最後の)値が重複しています。配列を印刷

は、すべてのオブジェクトが同じであることを示しています。

Array: (
    "<TestObject: 0x6b9b400>", 
    "<TestObject: 0x6b9b400>", 
    "<TestObject: 0x6b9b400>", 
    "<TestObject: 0x6b9b400>", 
    "<TestObject: 0x6b9b400>", 
    "<TestObject: 0x6b9b400>") 

は、私は新しいと仕事をしたいTestObject毎回の新しいオブジェクトをアロケーションべきでしょうか?

答えて

3

新しいオブジェクトで作業するたびにTestObjectの新しいオブジェクトを割り当てる必要がありますか?

はい。新しいオブジェクトを割り当てない場合は、同じオブジェクトを何度も繰り返し使用しています。複数の異なるオブジェクトが必要なので、それぞれに新しいインスタンスを割り当てます。

1

基本的に同じオブジェクトを追加しています。あなたの配列内の各オブジェクトの "a_actual"の値をチェックすると、同じことがわかります。 新しいものを割り当ててを追加する必要があります。

2

なぜ失敗したのかを明確にするには、insertObject:がオブジェクトへのポインタをパラメータとして受け取ると考えてください。したがって、insertObject:メッセージを配列に送信すると、オブジェクト自体のコピーではなく、そのオブジェクトへのポインタが格納されます。そのため、新しいインスタンスを割り当て/初期化する必要があります。

関連する問題