2012-05-10 86 views
0

我試圖添加一個對象到NSMutableArray它似乎得到重複。對象變得重複在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>") 

我應該ALLOC的TestObject每次我想用一個新的工作的一個新對象?

回答

3

我應該每次分配一個TestObject的新對象,我想用新的?

是的。如果你不分配一個新的對象,你只是一遍又一遍地處理同一個對象。看起來你想要多個不同的對象,所以爲每個對象分配一個新的實例。

1

你基本上是添加相同的對象。如果您檢查數組中每個對象的「a_actual」的值,則會看到它是相同的。 您應該分配一個新的並添加它

2

爲了讓它更清楚爲什麼它失敗了,請考慮insertObject:將一個指向對象的指針作爲參數。因此,當您將insertObject:消息發送到您的陣列時,它將存儲指向該對象的指針,而不是該對象本身的副本。這就是爲什麼你必須分配/初始化它的一個新實例。