Contando o número de meia-noite entre duas datas

Matemática com datas é sempre complicada, calcular o número de meia-noite entre dois dias não é uma exceção.
Aqui, estendi o exemplo da documentação da Apple para evitar nildatas.

- (NSInteger)midnightsBetweenFromDate:(NSDate *)startDate
toDate
:(NSDate *)endDate
{
if (startDate == nil || endDate == nil)
return NSNotFound;

NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];

NSInteger startDay = [calendar ordinalityOfUnit:NSDayCalendarUnit
inUnit
:NSEraCalendarUnit
forDate
:startDate];

NSInteger endDay = [calendar ordinalityOfUnit:NSDayCalendarUnit
inUnit
:NSEraCalendarUnit
forDate
:endDate];
[calendar release];

if (startDay == NSNotFound)
return startDay;

if (endDay == NSNotFound)
return endDay;

return endDay - startDay;
}