Tôi có một số mã tôi sử dụng để sắp xếp các ngày lịch trông giống như sau:
#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
Nếu tôi chạy nó trong trình mô phỏng thì tất cả đều ổn. Nếu tôi chạy nó trên thiết bị, tôi nhận được thông báo gỡ lỗi mỉa mai này.
2012-09-19 22: 40: 13.972 APPNAME [4923: 907] * - [__ NSCFCcác thành phần: fromDate:]: date không được là 0
Ý tôi là thực sự, bạn nghĩ hoạt động đó có ý nghĩa gì với một ngày không?
Một ngoại lệ đã được tránh cho bây giờ.
Một số lỗi trong số này sẽ được báo cáo với đơn khiếu nại này, sau đó các vi phạm tiếp theo sẽ chỉ âm thầm làm bất cứ điều gì ngẫu nhiên dẫn đến kết quả từ con số không. Đây là hậu quả xảy ra lần này (một số khung có thể bị thiếu do tối ưu hóa trình biên dịch):
Bạn phải bật cười vì điều đó nhưng tôi không chắc chắn rằng dateFormatFromTemplate:
mã của tôi có gì sai . Bất kỳ trợ giúp sẽ được đánh giá cao.
Chạy Xcode V 4.5 btw
CẬP NHẬT:
Backtrace:
0 CoreFoundation 0x39ff0e55 + 84
1 APPNAME 0x00040be1 - [MeetingsViewController dateAtBeginningOfDayForDate:] + 140
Vì vậy, tôi đoán mọi thứ đang trở nên tồi tệ trong dateAtBeginningOfDayForDate
phương pháp của tôi . Trông như thế này:
/*
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;
}
Tôi sử dụng phương pháp này để chia nhỏ NSDate đã cho thành 'các thành phần cốt lõi của nó để tôi có thể sắp xếp chúng hiệu quả hơn. Tuy nhiên, ứng dụng của tôi phải là quốc tế, đó là lý do đằng sau việc sử dụng NSLocale
để định dạng đầu ra ngày. Từ những gì có vẻ như tôi sẽ cần phải thay đổi của tôi dateAtBeginningOfDayForDate
để làm việc quốc tế.