あたり
のinit
方法NSDateFormatter
は「iPhone OS 2.0 から iPhone OS 3.2 で利用可能」であるため、4.0では利用できません。確かに機能しますが、これは奇妙に思えます。これは間違いですか、それとも を作成する他の方法はありますNSDateFormatter
か?
あたり
のinit
方法NSDateFormatter
は「iPhone OS 2.0 から iPhone OS 3.2 で利用可能」であるため、4.0では利用できません。確かに機能しますが、これは奇妙に思えます。これは間違いですか、それとも を作成する他の方法はありますNSDateFormatter
か?
この非推奨は、Apple が NSDateFormatter のヘッダーをクリーンアップするだけです。init は、NSNumberFormatter が継承する NSObject で既に宣言されています。再宣言は必要ありませんが、サブクラスがスーパークラスのデフォルト初期化子の実装を提供する必要があるため、実装では Apple が init をオーバーライドします。
ここfalconcreek
で述べたように、Apple はドキュメントをクリアしています。
つまり、元々、- (id) init
NSDateFormatter ヘッダー ファイルで再宣言されています。それは不要で、誰かが後で削除しました。ドキュメントはおそらく自動的に生成され、非推奨になったのは再宣言のみであることがわかりませんでした。
要するに、init
あなたが望むように使用してくださいNSDateFormatter
!
ドキュメントよりもヘッダーファイルを信頼します。
たとえば、Formatter Behaviors と 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:
NSDateFormatterBehavior10_4
initWithDateFormat:allowNaturalLanguage:
実際には廃止された方法のように聞こえますか?
それは本当に奇妙です。多分+[NSDateFormatter new]
その仕事をしますか?
クラス リファレンスのサンプル コードは引き続きこのinit
メソッドを使用しているため、独自のコードで安全に使用できると言えます。
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
.
複数の iOS4 アプリで init メソッドを使用していますが、それらは承認されており、ストアにあります。それを機能させる方法は考えられないので、ドキュメントの単なるタイプミスのように思えます。