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];

配列から期間を抽出すると、最後の要素 x 3 のみを受け取るのはなぜですか ???

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

1 2 3 の代わりに 3 3 3 を受け取りますか?

4

2 に答える 2

2

これは、同じオブジェクトを配列に何度も入れているためです。何度追加しても、どのプロパティを変更しても、同じオブジェクトです。

データのセットごとにオブジェクトをインスタンス化する必要があります。

于 2012-12-06T22:26:53.560 に答える
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];
于 2012-12-06T22:27:53.583 に答える