Как проверить NSDate против даты в календаре ТАПКУ - PullRequest
0 голосов
/ 26 октября 2011

Я использую базовые данные для хранения объектов для моего проекта. В объекте есть поле даты. Я хочу сравнить дату щелчка компонента календаря Tapku для iphone.Дата на моем объекте имеет формат

2011-01-10, и это локализованная дата.

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

Ответы [ 2 ]

2 голосов
/ 23 февраля 2012

Да, можете, вот что я сделал, чтобы это заработало:

для метода: (NSArray *) calendarMonthView: (TKCalendarMonthView *) monthView marksFromDate: (NSDate *) startDate toDate: (NSDate *) lastDate

  • Сделать обычную выборку данных ядра для получения массива объектов
  • Начните проверку каждый день от startDate до lastDate с помощью метода [NSArray indexesOfObjectsPassingTest:]
  • Для всего, что проходит тест add и object для массива меток и добавления словаря с тестируемым днем ​​в качестве ключа и выбранных объектов в качестве значений

ПРЕДУПРЕЖДЕНИЕ: убедитесь, что вы приводите свои объекты NSDate к бездействию, а время по Гринвичу: 0, чтобы сравнение дней работало (выучил это нелегко ...)

Вот код ...

self.marksArray = [NSMutableArray array];
self.dataDictionary = [NSMutableDictionary dictionary];

NSCalendar *cal = [NSCalendar currentCalendar];
[cal setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];

NSDateComponents *comp = [cal components:(NSMonthCalendarUnit | NSMinuteCalendarUnit | NSYearCalendarUnit | NSDayCalendarUnit | NSWeekdayCalendarUnit | NSHourCalendarUnit | NSSecondCalendarUnit) fromDate:start];

NSDate *ds = [cal dateFromComponents:comp];

// Init offset components to increment days in the loop by one each time
NSDateComponents *offsetComponents = [[NSDateComponents alloc] init];
[offsetComponents setDay:1];


while (YES) {
    // Is the date beyond the last date? If so, exit the loop.
    // NSOrderedDescending = the left value is greater than the right
    if ([ds compare:end] == NSOrderedDescending) {
        break;
    }

    NSIndexSet *indexes = [arrayWithObjectsFromCoreData indexesOfObjectsPassingTest:
                           ^BOOL (id el, NSUInteger i, BOOL *stop) {
                               NSDate *upd = [(YOUR_ENTINY *)el updated];

                               NSDate *day=[self midnightUTC:upd]; 
                               if([ds isSameDay:day]){ 
                                   return TRUE;
                               }
                               return FALSE;
                           }];



    if (indexes.count>0) {

        [self.marksArray addObject:[NSNumber numberWithBool:YES]];
        [self.dataDictionary setObject:[wods objectsAtIndexes:indexes] forKey:ds];


    }else {
        //no wods in this date
        [self.dataArray addObject:[NSNumber numberWithBool:NO]];
    } 

    // Increment day using offset components (ie, 1 day in this instance)
    ds = [cal dateByAddingComponents:offsetComponents toDate:ds options:0];



}
[offsetComponents release];

Метод midnightUTC можно найти здесь: http://www.voidasterisk.org/post/4209842795/how-to-calculate-nsdate-of-midnight-in-ios

0 голосов
/ 26 октября 2011

Может быть немного больше информации, но в библиотеке tapku есть метод расширения для NSDate, который называется isSameDay, поэтому вы можете использовать его:

if ([myDate isSameDay:returnedDate])
    // Do something here

Это то, что вы ищете?

...