2010-07-05 50 views
15

NSDateFormatter的init方法已被棄用?

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

NSDateFormatterinit方法是 「可用於iPhone OS 2.0通過iPhone OS 3.2」,因此不 4.0。現在,它確實有效,但這似乎很奇怪。這是一個錯誤還是有其他方法來創建一個NSDateFormatter

+0

你從哪裏讀到這個? – prgmast3r 2010-12-14 15:49:53

+0

官方文檔:http://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Classes/NSDateFormatter_Class/DeprecationAppendix/AppendixAdepledatedAPI.html – bontoJR 2010-12-14 16:04:23

+0

我很確定「setLocale」和「setTimeStyle」是正確的方法來做到這一點,我只是好奇你現在應該如何獲得NSDateFormatter實例? – fuzzygoat 2010-12-14 16:08:15

回答

18

這個棄用只是蘋果清理NSDateFormatter頭。 init已經在NSObject的NSNumberFormatter繼承自NSObject中聲明。 Redeclaring是沒有必要的,但是在實現中,蘋果將會覆蓋init,因爲subclassess應該爲超類的默認構造器提供實現。

+0

非常感謝你的解釋。非常誤導蘋果的一部分。它不應該被標記爲已棄用。 – dmkash 2011-03-06 22:12:29

+0

然而,爲這個類的init方法提供* documentation *對於描述這個類的實現有什麼作用仍然很有用。例如「初始化默認格式化的格式化程序」等。 – user102008 2011-04-26 00:06:00

0

我在多個iOS4應用程序中使用init方法,它們已被批准並在商店中使用。我可以想辦法讓它無法工作,所以它看起來只是它在文檔上的一個錯字。

0

類引用中的示例代碼仍然使用init方法,所以我會說它可以安全地在您自己的代碼中使用它。

1

這真的很奇怪。也許+[NSDateFormatter new]將完成這項工作?

+3

如果'init'被棄用,那麼'+ new'也是因爲'+ new'不管怎麼說都不過是'alloc + -init'(但猜測得很好)。 – bbum 2010-12-14 17:59:43

2

我會相信文檔中的頭文件。

例如,Formatter Behaviors and OS Versions似乎自相矛盾:

默認情況下,對NSDateFormatter的Mac OS X v10.4的情況下,具有相同的行爲,因爲他們沒有在Mac OS X版本10.0到10.3。在Mac OS X v10.5及更高版本中,NSDateFormatter默認爲10.4+行爲。

如果使用initWithDateFormat:allowNaturalLanguage:初始化格式化程序,則(爲了向後兼容的原因)創建「舊式」日期格式化程序。要使用新行爲,請使用init初始化格式器。如有必要,您可以使用setDefaultFormatterBehavior:)設置默認類行爲,您可以使用setFormatterBehavior:消息和參數NSDateFormatterBehavior10_4來設置實例的行爲。

聽起來像initWithDateFormat:allowNaturalLanguage:實際上是棄用的方法?

+0

沒錯,看起來'initWithDateFormat:allowNaturalLanguage:'實際上是不贊成使用的方法。頭文件是這樣的情況下應該引用的頭文件。 – paulbailey 2010-12-14 22:07:41

6

falconcreek表示here,Apple剛剛清理文檔。

這意味着最初,- (id) init已在NSDateFormatter頭文件中重新聲明。這是不必要的,稍後有人將其刪除。該文檔可能是自動生成的,並沒有提到它只是已被棄用的重新清理。

總之,使用init隨着NSDateFormatter

+1

我認爲文件傳遞極具誤導性。我使用了「無用」鏈接向Apple發送評論。 – JeremyP 2010-12-15 09:30:29

0

您可以證明NSDateFormatter具有不同的行爲,具體取決於您選擇的初始值設定項和您正在編譯的SDK。以下是使用SDK 10.5和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"); 

這將返回NSDateFormatterBehavior10_0
相反,當您使用[[NSDateFormatter alloc] init];時,行爲是NSDateFormatterBehavior10_4