0

オブジェクトを追加しようとすると、NSMutableArray重複するようです。

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

いくつかのポインタを作成します。

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の新しいオブジェクトを割り当てる必要がありますか?

4

3 に答える 3

3

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

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

于 2012-05-10T09:58:29.420 に答える
2

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

于 2012-05-10T10:06:08.777 に答える
1

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

于 2012-05-10T09:58:23.070 に答える