2010-07-09 22 views
8

Tôi đang sử dụng đoạn mã sau & của nó làm việc hoàn toàn tốt đẹp trong hệ điều hành iPhone 3,2Đối với iPhone OS 4.0 "dateFromString" phương pháp NSDateFormatter trả về nil

+(NSDate *)NSDateFromString:(NSString *)dateString 
{ 

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 

    [dateFormatter setDateStyle:NSDateFormatterShortStyle]; 
    [dateFormatter setTimeStyle:NSDateFormatterShortStyle]; 
    [dateFormatter setDateFormat:@"yyyy-MM-dd"]; 
    NSDate *dateObj=[dateFormatter dateFromString:dateString]; 
    [dateFormatter release], dateFormatter=nil; 
    return dateObj; 
} 

Nhưng khi tôi cố gắng sử dụng cùng mã Tôi iPhone OS 4.0 với dateObj là không.

Lý do là:

- (id)init phương pháp NSDateFormatter là chỉ có sẵn trong hệ điều hành iPhone 2.0 thông qua hệ điều hành iPhone 3.2. Nó không được chấp nhận trong hệ điều hành iPhone 4.0.

Bây giờ giải pháp cho điều đó là gì? Làm thế nào để init NSDateFormater? Phương án thay thế là gì?

+0

Chúng tôi có thể chuyển đổi NSString thành NSDate bằng NSDateComponents như: NSDateComponents * comps = [[NSDateComponents alloc] init]; [comps setDay: 6]; [comps setMonth: 5]; [comps setYear: 2004]; NSCalendar * gregorian = [[Phân bổ NSCalendar] initWithCalendarIdentifier: NSGregorianCalendar]; Ngày NSDate * = [ngày gregorianTừ thành phần: comps]; [comps release]; – Rambo

+3

Nhưng, Bây giờ phải làm gì với NSDateFormatter? Chúng ta không thể sử dụng nó với hệ điều hành iPhone 4.0? nếu có thì làm thế nào? – Rambo

+1

chỉ cần sử dụng nó không được chấp nhận không có nghĩa là nó sẽ không hoạt động - nó chỉ có thể không hoạt động trong tương lai. Nếu bạn __NSLog (@ "% @", dateFormatter), __ sau khi bạn đã gọi init bạn sẽ nhận được gì? Nếu bạn không nhận được nil, cảnh báo này là không có gì để làm với vấn đề của bạn. – deanWombourne

Trả lời

2

- (id)init không được dùng cho NSDateFormatter trong iOS4. Đó là lỗi trong tài liệu.

+0

Tôi đã nghĩ rằng đây phải là trường hợp - là tài liệu này bất cứ nơi nào trên diễn đàn phát triển của Apple, vv? –

2

[NSDateFormatter dateFormatFromTemplate: tùy chọn: locale:] có thể làm việc tốt hơn

NSString *format = [NSDateFormatter 
        dateFormatFromTemplate:@"Mdjm" 
            options:0 
            locale:[NSLocale currentLocale]]; 

// "M/dh: mm một" định dạng // tiếng Anh-Mỹ được trả về cho địa phương Mỹ

[dateFormatter setDateFormat:format]; 
NSDate *date = [dateFormatter dateFromString:dateString]; 
2

Trong iOS2.x và 3.x mô tả NSDate/datefromstring trả về: 2010-09-24 17:30:00 - 0700

trong iOS 4.1 nó trả về: 2010- 09-25 00:30:00 GMT

Bạn có thể gửi lỗi cho táo. Nó thậm chí không theo các đặc điểm kỹ thuật mà nói rằng nó sẽ trả về 0000 cho bù đắp. Vì vậy, không chỉ không trả về ngày địa phương, nó cũng sử dụng GMT thay vì bù đắp. Có vẻ như định dạng mới này không tương thích với các phương thức NSDateFormatter.

Ngoài ra, tôi không nghĩ rằng đó là lỗi trong tài liệu. Trong tài liệu API Diff, nó liệt kê rằng init được loại bỏ cho NSDateFormatter.

+0

Thậm chí còn khó hiểu hơn nữa, kết quả sẽ thay đổi nếu bạn thay đổi cấu hình thiết bị của mình từ đồng hồ 24 giờ sang đồng hồ 12 giờ: S –

Các vấn đề liên quan