Question

I've two NSDateComponents, I want all NSDateComponents in between those two, I've tried the following,

NSDateComponents *first = ...;
NSDateComponents *second = ...;

BOOL boolDone = NO;
while (!boolDone) {
    [array addObject:first];
    first.day+=1;
    NSLog(@"%@",first);

    if([[first date] compare:[second date]] == NSOrderedSame)
    {
        boolDone = YES;
    }
}

NSLog(@"All dates : %@",array);

After the loop, it just prints the date I've in first NSDateComponent...!! What's wrong?

Here's a log to understand

2014-01-18 19:47:16.413 testCalendar[4274:a0b]

Calendar Year: 2014
Month: 1
Leap month: no
Day: 19

2014-01-18 19:47:16.415 testCalendar[4274:a0b]

Calendar Year: 2014
Month: 1
Leap month: no
Day: 20

2014-01-18 19:47:16.416 testCalendar[4274:a0b]

Calendar Year: 2014
Month: 1
Leap month: no
Day: 21

2014-01-18 19:47:16.416 testCalendar[4274:a0b]

Calendar Year: 2014
Month: 1
Leap month: no
Day: 22

2014-01-18 19:47:16.417 testCalendar[4274:a0b]

Calendar Year: 2014
Month: 1
Leap month: no
Day: 23

2014-01-18 19:47:16.418 testCalendar[4274:a0b]

23-1-2014

23-1-2014

23-1-2014

23-1-2014

23-1-2014

Was it helpful?

Solution

You always add the same element to the array. The array just hold pointers to its elements, therefore at the end of the loop, it contains n pointers to the same object first. Changing

[array addObject:first];

to

[array addObject:[first copy]];

should solve the problem.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top