Một trong các ứng dụng của tôi gặp sự cố sau khi chạy trên thiết bị vừa nâng cấp lên iOS9 (mục tiêu của ứng dụng là 8.1).NSDateFormatter.dateFromString đang trả về null sau khi nâng cấp iOS9
Ứng dụng hoạt động tốt trên iOS9 trước, tuy nhiên, sau khi CHỈ nâng cấp lên iOS9 trên thiết bị, sự cố sau xảy ra.
Biến bên dưới được gọi là 'anObsDate' hiện trả về giá trị rỗng. Tôi không biết tại sao. Có vẻ như bản nâng cấp độc lập của iOS9 trên thiết bị chủ đã kích hoạt sự cố này xảy ra.
NSDate *anObsDate = [[self bomDateFormatter] dateFromString:[anObs timeStamp]];
Khi tôi chạy ứng dụng với debug sau, chúng tôi có sản lượng này:
NSLog(@"Timestamp %@", [anObs timeStamp]);
NSLog(@"Formatter %@", [self bomDateFormatter]);
NSDate *anObsDate = [[self bomDateFormatter] dateFromString:[anObs timeStamp]];
Timestamp 2015-09-17 00:01:10
Formatter <NSDateFormatter: 0x7fe7abc653c0>
tôi đặt định dạng ngày của tôi như sau:
NSLocale *locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_AU"];
NSDateFormatter *countDownFormatter = [[NSDateFormatter alloc] init];
[countDownFormatter setLocale:locale];
[countDownFormatter setTimeZone:[NSTimeZone timeZoneWithName:@"Australia/Melbourne"]];
[countDownFormatter setDateFormat:@"yyyy'-'MM'-'dd'T'HH':'mm':'ss"];
return countDownFormatter;
lần nữa để làm điều này rõ ràng , nếu tôi chạy ứng dụng của mình trên thiết bị iOS9 trước, mọi thứ hoạt động tốt và dateFromString trả về một NSDate. Sau khi nâng cấp lên phiên bản iOS9 dateFromString trả về giá trị rỗng.
Mọi đề xuất?
Cảm ơn.
điểm trên. Tôi đã xóa 'T' khỏi định dạng ngày của tôi và đã khắc phục sự cố. Tuy nhiên, tôi không nên mong đợi tôi cần làm điều này với bản cập nhật iOS độc lập. – ack
Đồng ý. Có lẽ xứng đáng với một báo cáo lỗi cho Apple. – ospr
Apple đã nhắc tôi rằng các ngôn ngữ như 'en_AU' là cấu trúc người dùng đối mặt và chúng * thay đổi thường xuyên *. Ví dụ, một số thời gian khoảng năm 1966, en_AU thay đổi từ làm việc với “£” để làm việc với “$”. Chuỗi định dạng ngày không đảm bảo sự ổn định ở ngôn ngữ hướng đến người dùng. Họ khuyên bạn nên sử dụng en_US_POSIX, được cho là một miền địa phương cố định không bao giờ thay đổi. Tuy nhiên, vấn đề tôi báo cáo ở trên vẫn tồn tại với en_US_POSIX ... Thực tế là một NSDate hợp lệ đã được trả lại khi trình định dạng chuỗi và chuỗi không khớp với chính nó là lỗi; dường như đã được sửa ở iOS9. – ack