仅从最后显示的数组中提取数据

时间:2012-12-06 22:18:01

标签: objective-c

我有这个模特:

@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 个答案:

答案 0 :(得分:2)

那是因为你将同一个对象一遍又一遍地放入你的数组中。无论你添加多少次,无论你改变哪个属性,它都是同一个对象。

您需要为每组数据实例化一个对象。

答案 1 :(得分: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];