Итерировать по NSArray, заполненному датами и сравнивать с другим NSArray - PullRequest
2 голосов
/ 28 августа 2011

У меня есть NSArray, заполненный примерно 30 датами в формате NSDate,

Что мне нужно сделать, это создать еще один массив из этого, который содержит логическое значение для всех дат от первой даты допоследняя дата.

ex Array 1 1/1/11 3/1/11 5/1/11

Array 2 Да Нет Да Нет Да

Мне это нужно длякалендарь библиотеки тапку

Это то, что у меня есть, но я никогда не меняюсь

int i=0;
for (NSDate *date = [[startingDate copy] autorelease]; [date compare: endingDate] < 0;
     date = [date dateByAddingTimeInterval:24 * 60 * 60] ) {
    NSLog( @"%@ in [%@,%@]", date, startingDate, endingDate );

    int day1 = [[NSCalendar currentCalendar] ordinalityOfUnit:NSDayCalendarUnit inUnit:NSEraCalendarUnit forDate:[eventDates objectAtIndex:i]];
    int day2 = [[NSCalendar currentCalendar] ordinalityOfUnit:NSDayCalendarUnit inUnit:NSEraCalendarUnit forDate:date];

    if(day1-day2==0) {
        NSLog(@"yeh");
        i=i+1;
        //add yes to array2

    } else {
        NSLog(@"nah");
        NSLog(@"%i",i);
        //add no to array 2
    }
}

1 Ответ

1 голос
/ 28 августа 2011

Мне кажется, я не совсем понимаю, что вы хотите сделать, но я попробую.

Предположим, у вас есть 2 NSDate, назовите их date1 и date2, и вы хотите отметить любые записи в массиве NSDate, назовите его arrayOfDates, которые находятся 2 NSDate или нет, и сохраните значения YES или NO в другом массиве, назовите его boolValuesOfDates. Затем попробуйте этот метод:

- (void)compareDatesOfArrayFromDate:(NSDate *)date1 toDate:(NSDate *)date2; {

  NSDate * firstDate;
  NSDate * secondDate;

  if([date1 timeIntervalSinceDate:date2] >= 0){
    firstDate = date2;
    secondDate = date1;
  }
  else{
    firstDate = date1;
    secondDate = date2;
  }

  if(boolValuesOfDates != nil)
    [boolValuesOfDates release]; // Release the YES/NO array for the new values.

  boolValuesOfDates = [[NSMutableArray alloc] initWithCapacity:[arrayOfDates count]];

  BOOL isInbetweenDates;
  NSDate * curDate;

  for(int i = 0; i < [arrayOfDates count]; i++){
    curDate = [arrayOfDates objectAtIndex:i];
    isInbetweenDates = NO;
    if([curDate timeIntervalSinceDate:firstDate] >= 0){
      if([curDate timeIntervalSinceDate:secondDate] <= 0){
        isInbetweenDates = YES;
      }
    }
    [boolValuesOfDates addObject:[NSNumber numberWithBool:isInbetweenDates]];
  }
}

Этот метод проверяет порядок 2 введенных NSDate, а затем сравнивает NSDate в массиве, и, если они находятся между ними, помечает их YES или NO иначе. Надеюсь, что поможет!

...