IOS: проблема с NSOrderedDescending и NSOrderedAscending - PullRequest
3 голосов
/ 06 июня 2011

Я хочу сравнить даты и использую этот код

в одном примере значения даты для моей даты: date1 = 6/06/2011 date2 = 8/06 / 2011

dateSelected = 06.06.2011, все в порядке, но если dateSelected = 06.06.2011 или dateSelected = 08.06.2011, код не вводится внутри моего «если», почему ???

if (([dateSelected compare:date1] == NSOrderedDescending) &&
                ([dateSelected compare:date2]== NSOrderedAscending))
            {}

Ответы [ 3 ]

3 голосов
/ 06 июня 2011

NSDates представляют собой момент времени с 01.01.2000 00:00 UTC. Так что все эти даты имеют временные составляющие. -compare: сравнивает дату и время.

Предположительно, вы действительно хотите проверить, находится ли выбранная дата между 6.06.2011 00:00 и 06.09.2011 00:00. Также вы, вероятно, хотите, чтобы дата 6/6/2011 00:00 считалась как в диапазоне. Так что вам нужно что-то вроде

NSComparisonResult compareStart = [date1 compare: selectedDate]; // date1 is 6/6/2011 00:00
NSComparisonResult compareEnd = [date2 compare: selectedDate];   // date2 is 9/6/2011 00:00

if ((compareStart == NSOrderedAscending) || (compareStart == NSOrderedSame)
    && (compareEnd == NSOrderedDescending))
{
    // date is in the right range
}
0 голосов
/ 30 октября 2012

Для тех, у кого такая же проблема, как у @blackguardian:

Cannot initialize a parameter of type 'NSNumber *' with an lvalue of type 'NSDate *'


Примерно так:

NSDate* oldDate = [NSDate date];
BOOL older = ([[NSDate date] compare:oldDate] == NSOrderedDescending);


Я не знаю почему, но вам нужно привести "[NSDate date]" в "NSDate *". Это работает:

NSDate* oldDate = [NSDate date];
BOOL older = ([[(NSDate*)[NSDate date] compare:oldDate] == NSOrderedDescending);
0 голосов
/ 06 июня 2011

Попробуйте это:

if (([date1 compare:dateSelected] == NSOrderedAscending) &&
                ([date2 compare:dateSelected]== NSOrderedDescending))
            {}
...