16

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

init方法NSDateFormatter是“在 iPhone OS 2.0 到 iPhone OS 3.2 中可用”,因此在 4.0 中不可用。现在,它确实有效,但这似乎很奇怪。这是一个错误还是有其他方法可以创建一个NSDateFormatter

4

7 回答 7

18

这种弃用只是苹果清理 NSDateFormatter 的标头。init 已经在 NSNumberFormatter 继承的 NSObject 中声明。重新声明不是必需的,但是在实现中,苹果将覆盖 init,因为子类应该为超类的默认初始化程序提供实现。

于 2010-07-05T22:12:50.783 回答
6

就像这里falconcreek所说的,Apple 只是在清除文档。

这意味着原来,- (id) init已经在 NSDateFormatter 头文件中重新声明了。那是不必要的,后来有人将其删除。该文档可能是自动生成的,并且没有发现它只是被弃用的重新声明。

简而言之,init随心所欲地使用NSDateFormatter!

于 2010-12-14T21:38:18.450 回答
2

我会相信头文件而不是文档。

例如,格式化程序行为和操作系统版本似乎自相矛盾:

默认情况下,在 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:NSDateFormatterBehavior10_4

听起来initWithDateFormat:allowNaturalLanguage:实际上是不推荐使用的方法?

于 2010-12-14T21:29:32.497 回答
1

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

于 2010-12-14T16:09:33.160 回答
0

我在多个 iOS4 应用程序中使用 init 方法,它们已获得批准并在商店中。我想不出任何办法让它工作,所以它看起来只是文档上的一个错字。

于 2010-07-05T22:01:47.660 回答
0

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

于 2010-07-05T22:11:56.637 回答
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.

于 2010-12-17T11:26:28.600 回答