[NSDate date] создаст новый объект даты, используя текущие дату и время. Поскольку вы создаете два объекта NSDate в разное время (но только с разницей в миллисекунды), поэтому он всегда возвращается в будущем.
Я могу придумать два способа это исправить.
Создать объект даты только:
NSDate *currentDate = [NSDate date];
NSComparisonResult result = [currentDate compare:currentDate];
Или Вы можете использовать NSTimeInterval, который возвращает разницу во времени в секундах:
(NSTimeInterval)timeIntervalSinceDate:(NSDate *)anotherDate