2012-12-06 29 views
0

我有這種模式:從陣列中提取數據只有最後顯示

@interface Data : NSObject 
@property (nonatomic, assign) int Period; 
@property (nonatomic, assign) NSDate *Start; 
@property (nonatomic, assign) NSDate *End; 
@end 

@implementation Data 
@synthesize Period, Start, End; 
@end 

我在可變數組添加數據。

@property (strong, nonatomic) NSMutableArray* myArray; 
self.myArray = [NSMutableArray arrayWithCapacity:0]; 

Data *element =[ [Data alloc] init]; 
element.Period = 1; 
element.Start = dateStart1; 
element.End = dateEnd1; 
[self.myArray addObject:element]; 

element.Period = 2; 
element.Start = dateStart2; 
element.End = dateEnd2; 
[self.myArray addObject:element]; 

element.Period = 3; 
element.Start = dateStart3; 
element.End = dateEnd3; 
[self.myArray addObject:element]; 

爲什麼從數組i中提取Period時只接收到最後一個元素x 3 ???

Data * NumElement = [self.myArray valueForKey:@"Period"]; 
NSLog(@"All period: %@", NumElement); 

我收到3 3 3而不是1 2 3?

回答

2

您實例化一個對象,將其添加到數組中,然後更改同一個對象並將其重新添加到數組中等等。數組最後保存對同一對象的3個引用,並將值最後分配給它。

試試這個:

Data *element1 =[ [Data alloc] init]; 
element1.Period = 1; 
element1.Start = dateStart1; 
element1.End = dateEnd1; 
[self.myArray addObject:element1]; 

Data *element2 =[ [Data alloc] init]; 
element2.Period = 2; 
element2.Start = dateStart2; 
element2.End = dateEnd2; 
[self.myArray addObject:element2]; 

Data *element3 =[ [Data alloc] init]; 
element3.Period = 3; 
element3.Start = dateStart3; 
element3.End = dateEnd3; 
[self.myArray addObject:element3]; 
+0

謝謝,它工作正常。 – Fabrizio

+0

不客氣。還有一點:除非他們對語言進行了重大更改,否則像int這樣的非對象非指針標量屬性不會採用「非原子」或「分配」。只需要這樣做:@property int Period;但保留其他2個屬性。 – Wienke

2

這是因爲您一次又一次地將放入同一個對象。不管你添加了多少次,不管你改變了它的屬性,它都是同一個對象。

您需要爲每組數據實例化一個對象。

+0

你是絕對正確的,謝謝。 – Fabrizio