NSDateFormatter的init方法已弃用?

时间:2010-07-05 21:45:35

标签: iphone ios4 nsdateformatter

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

init的{​​{1}}方法“在iPhone OS 2.0到iPhone OS 3.2中可用”,因此在4.0中。现在,它确实有效,但这看起来很奇怪。这是一个错误还是有其他方法来创建NSDateFormatter

7 个答案:

答案 0 :(得分:18)

这个弃用只是苹果清理NSDateFormatter的标题。 init已经在NSSOumberFormatter继承的NSObject中声明。不需要重新声明,但是在实现中,apple将覆盖init,因为子类应该提供超类的默认初始值设定项的实现。

答案 1 :(得分:6)

就像falconcreek所说here一样,Apple只是在清理文档。

这意味着最初,- (id) init已在NSDateFormatter头文件中重新声明。这是不必要的,有人刚刚删除它。文档可能是自动生成的,并没有发现它只是被弃用的重新清理。

简而言之,您可以init使用NSDateFormatter

答案 2 :(得分:2)

我相信文档上的头文件。

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

  

默认情况下,在Mac OS X v10.4上NSDateFormatter的实例与Mac OS X版本10.0到10.3上的实例具有相同的行为。在Mac OS X v10.5及更高版本中,NSDateFormatter默认为10.4+行为。

     

如果使用initWithDateFormat:allowNaturalLanguage:初始化格式化程序,则(出于向后兼容性原因)创建“旧式”日期格式化程序。要使用新行为,请使用init初始化格式化程序。如有必要,可以使用setDefaultFormatterBehavior:设置默认类行为,可以使用带有参数setFormatterBehavior:的{​​{1}}消息设置实例的行为。

听起来NSDateFormatterBehavior10_4实际上是弃用的方法?

答案 3 :(得分:1)

这真的很奇怪。也许+[NSDateFormatter new]会做这个工作吗?

答案 4 :(得分:0)

我在多个iOS4应用程序中使用init方法,并且它们已在商店中获得批准。我认为没有办法让它工作,所以它似乎只是文档上的错字。

答案 5 :(得分:0)

类引用中的示例代码仍然使用init方法,因此我认为在您自己的代码中使用它是安全的。

答案 6 :(得分: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