2010-07-05 32 views
15

mỗiPhương thức init của NSDateFormatter không được chấp nhận?

http://developer.apple.com/iphone/library/documentation/Cocoa/Reference/Foundation/Classes/NSDateFormatter_Class/Reference/Reference.html

Phương pháp init của NSDateFormatter là "Có sẵn trong iPhone OS 2.0 thông qua hệ điều hành iPhone 3.2", và do đó không trong 4.0. Bây giờ, nó chắc chắn hoạt động, nhưng điều này có vẻ kỳ quặc. Đây có phải là một sai lầm hoặc là có một số cách khác để tạo ra một NSDateFormatter?

+0

Bạn đã đọc nội dung này ở đâu? – prgmast3r

+0

Tài liệu chính thức: http://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Classes/NSDateFormatter_Class/DeprecationAppendix/AppendixADeprecatedAPI.html – bontoJR

+0

Tôi khá chắc chắn "setLocale" và "setTimeStyle" là đúng cách để làm điều này, tôi chỉ tò mò làm thế nào bạn có nghĩa vụ phải có được các NSDateFormatter dụ bây giờ? – fuzzygoat

Trả lời

18

Việc ngừng sử dụng này chỉ là xóa sạch các tiêu đề cho NSDateFormatter. init đã được khai báo trong NSObject mà NSNumberFormatter kế thừa từ đó. Việc khai báo lại là không cần thiết, tuy nhiên trong việc thực hiện táo sẽ ghi đè init như là lớp con nên cung cấp các triển khai cho trình khởi tạo mặc định của lớp cha.

+0

Cảm ơn bạn rất nhiều vì lời giải thích đó. RẤT gây hiểu nhầm về phần của Apple. Nó không nên được đánh dấu là không được chấp nhận. – dmkash

+0

Tuy nhiên, vẫn có ích nếu có * tài liệu * cho phương thức init cho lớp này, để mô tả những gì thực hiện trong lớp này. ví dụ. "khởi tạo trình định dạng với định dạng mặc định", v.v. – user102008

0

Tôi sử dụng phương pháp init trong nhiều ứng dụng iOS4 và chúng được chấp thuận và trong cửa hàng. Tôi có thể nghĩ rằng không có cách nào để làm cho nó hoạt động, vì vậy nó có vẻ như nó chỉ là một lỗi đánh máy trên các tài liệu.

0

Mã ví dụ trong tham chiếu lớp vẫn sử dụng phương pháp init, vì vậy tôi muốn nói rằng nó an toàn để sử dụng nó trong mã của riêng bạn.

1

Điều đó thật kỳ lạ. Có lẽ +[NSDateFormatter new] sẽ thực hiện công việc?

+3

Nếu 'init' không được chấp nhận, thì' + new' cũng vậy, bởi vì '+ new' không là gì ngoài' + alloc/-init' (nhưng đoán tốt). – bbum

2

Tôi sẽ tin tưởng các tệp tiêu đề trong tài liệu.

Ví dụ, Formatter Behaviors and OS Versions dường như mâu thuẫn với bản thân:

Theo mặc định, trên Mac OS X v10.4 trường hợp của NSDateFormatter có hành vi tương tự như họ đã làm trên các phiên bản Mac OS X 10,0-10,3. Trên Mac OS X v10.5 trở lên, NSDateFormatter mặc định là hành vi 10.4+.

Nếu bạn khởi tạo trình định dạng bằng cách sử dụng initWithDateFormat:allowNaturalLanguage:, bạn (vì lý do tương thích ngược) tạo trình định dạng ngày “kiểu cũ”. Để sử dụng hành vi mới, bạn khởi tạo trình định dạng với init. Nếu cần thiết, bạn có thể đặt hành vi lớp mặc định bằng cách sử dụng setDefaultFormatterBehavior:), bạn có thể đặt hành vi cho một cá thể sử dụng thông báo setFormatterBehavior: với đối số NSDateFormatterBehavior10_4.

Có vẻ như phương pháp không được chấp nhận?

+0

Chính xác, có vẻ như 'initWithDateFormat: allowNaturalLanguage:' thực sự là phương thức không được chấp nhận. Các tập tin tiêu đề là những gì người ta nên tham khảo trong trường hợp như thế này. – paulbailey

6

Giống như falconcreek cho biết here, Apple chỉ đang xóa tài liệu.

Điều đó có nghĩa là ban đầu, - (id) init đã được redeclared trong tệp tiêu đề NSDateFormatter. Điều đó là không cần thiết và ai đó vừa xóa nó sau. Tài liệu có thể được tạo tự động và không nhận được rằng đó chỉ là quá trình tái cấu trúc không được chấp nhận.

Tóm lại, sử dụng init như bạn muốn với NSDateFormatter!

+1

Tôi nghĩ rằng tài liệu được đánh giá cao gây hiểu nhầm. Tôi đã sử dụng liên kết "không hữu ích" để gửi nhận xét tới Apple. – JeremyP

0

Bạn có thể tự chứng minh rằng NSDateFormatter có hành vi khác nhau phụ thuộc vào trình khởi tạo bạn chọn và SDK bạn đang biên dịch. Sau đây là thử nghiệm với SDK 10.5 và 10.6.

NSDateFormatter* df = [[NSDateFormatter alloc] initWithDateFormat:@"yyyyMMdd" allowNaturalLanguage:NO]; 
if ([df formatterBehavior] == NSDateFormatterBehavior10_0) 
    NSLog(@"NSDateFormatterBehavior10_0"); 
else if ([df formatterBehavior] == NSDateFormatterBehavior10_4) 
    NSLog(@"NSDateFormatterBehavior10_4"); 

Điều này trả về NSDateFormatterBehavior10_0.
Thay vào đó, khi bạn sử dụng [[NSDateFormatter alloc] init]; hành vi là NSDateFormatterBehavior10_4.

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