Ich habe einen Code, mit dem ich Kalenderdaten sortieren kann, die so aussehen:
#if !(TARGET_IPHONE_SIMULATOR)
NSString *formatString = [NSDateFormatter dateFormatFromTemplate:@"HH:mm dd MMM yyyy" options:0
locale:[NSLocale currentLocale]];
[fmt setDateFormat:formatString];
#else
[fmt setDateFormat:@"HH:mm dd MMM yyyy"];
#endif
Wenn ich es im Simulator laufen lasse, ist alles in Ordnung. Wenn ich es auf dem Gerät ausführe, erhalte ich diese sarkastische Debug-Meldung.
2012-09-19 22: 40: 13.972 APPNAME [4923: 907] * - [__ NSCFCalendar-Komponenten: fromDate:]: Datum darf nicht Null sein
Ich meine wirklich, was denkst du, soll eine Operation mit einem Null-Datum bedeuten?
Eine Ausnahme wurde vorerst vermieden.
Einige dieser Fehler werden mit dieser Beschwerde gemeldet, dann werden weitere Verstöße einfach stillschweigend das tun, was zufällig aus dem Nullpunkt resultiert. Hier ist die Rückverfolgung, in der dies diesmal aufgetreten ist (einige Frames fehlen möglicherweise aufgrund von Compiler-Optimierungen):
Sie müssen darüber lachen, aber ich bin mir nicht sicher, was mit meinem dateFormatFromTemplate:
Code nicht stimmt . Jede Hilfe wäre dankbar.
Xcode V 4.5 übrigens ausführen
AKTUALISIEREN:
Rückverfolgung:
0 CoreFoundation 0x39ff0e55 + 84
1 APPNAME 0x00040be1 - [MeetingsViewController dateAtBeginningOfDayForDate:] + 140
Ich denke, meine dateAtBeginningOfDayForDate
Methode läuft schlecht . Welches sieht so aus:
/*
Break down a given NSDate to its bare components for sorting
*/
- (NSDate *)dateAtBeginningOfDayForDate:(NSDate *)inputDate
{
// Use the user's current calendar and time zone
NSCalendar *calendar = [NSCalendar currentCalendar];
NSTimeZone *timeZone = [NSTimeZone systemTimeZone];
[calendar setTimeZone:timeZone];
// Selectively convert the date components (year, month, day) of the input date
NSDateComponents *dateComps = [calendar components:NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit fromDate:inputDate];
// Set the time components manually
[dateComps setHour:0];
[dateComps setMinute:0];
[dateComps setSecond:0];
// Convert back
NSDate *beginningOfDay = [calendar dateFromComponents:dateComps];
return beginningOfDay;
}
Ich verwende diese Methode, um ein bestimmtes NSDate in seine Kernkomponenten zu zerlegen, damit ich sie alle effizienter sortieren kann. Meine App muss jedoch international sein, was der Grund für die NSLocale
Formatierung der Datumsausgabe ist. Wie es scheint, muss ich meine ändern dateAtBeginningOfDayForDate
, um auch international zu arbeiten.