每
init
的{{1}}方法“在iPhone OS 2.0到iPhone OS 3.2中可用”,因此在4.0中不。现在,它确实有效,但这看起来很奇怪。这是一个错误还是有其他方法来创建NSDateFormatter
?
答案 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
。