iOS9にアップグレードしたばかりのデバイス(アプリケーションのターゲットは8.1)で実行した後、自分のアプリケーションの1つに問題が発生しています。NSDateFormatter.dateFromStringがiOS9のアップグレード後にnullを返す
アプリがiOS9より前で正常に動作していますが、デバイス上でiOS9にアップグレードした後、次の問題が発生しています。
「anObsDate」と呼ばれる以下の変数がnullを返すようになりました。なぜ私は考えていない。ホストデバイス上のiOS9のスタンドアロンアップグレードにより、この問題が発生するようになったようです。私は次のデバッグとアプリケーションを実行すると
NSDate *anObsDate = [[self bomDateFormatter] dateFromString:[anObs timeStamp]];
、我々はこの出力を持っている:
NSLocale *locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_AU"];
NSDateFormatter *countDownFormatter = [[NSDateFormatter alloc] init];
[countDownFormatter setLocale:locale];
[countDownFormatter setTimeZone:[NSTimeZone timeZoneWithName:@"Australia/Melbourne"]];
[countDownFormatter setDateFormat:@"yyyy'-'MM'-'dd'T'HH':'mm':'ss"];
return countDownFormatter;
は再びこれを明確にするために、次のように私は私の日付フォーマッタを設定
NSLog(@"Timestamp %@", [anObs timeStamp]);
NSLog(@"Formatter %@", [self bomDateFormatter]);
NSDate *anObsDate = [[self bomDateFormatter] dateFromString:[anObs timeStamp]];
Timestamp 2015-09-17 00:01:10
Formatter <NSDateFormatter: 0x7fe7abc653c0>
iOS9以前のデバイスでアプリケーションを実行すると、すべて正常に動作し、dateFromStringはNSDateを返します。 iOS9にアップグレードした後、dateFromStringはnullを返します。
提案がありますか?
ありがとうございました。
上のスポット。私は私の日付形式から 'T'を削除し、問題を修正しました。それでも、スタンドアロンのiOSアップデートでこれを行う必要があるとは思わなかったはずです。 – ack
合意。おそらくAppleにバグレポートの価値があるでしょう。 – ospr
Appleは、「en_AU」などのロケールはユーザーが直面している構成要素であり、定期的に変更する*ことを思い出しました。例えば、1966年頃、en_AUは "£"を使った作業から "$"を使う作業に変更されました。日付形式の文字列は、ユーザー向きロケールの安定性を保証しません。 en_US_POSIXは変更されない固定ロケールであるはずです。しかし、私が上で報告した問題は、en_US_POSIXでまだ残っています... 文字列フォーマッタと文字列が一致しなかったときに有効なNSDateが返されたということ自体がバグです。これはiOS9で修正されているようだ。 – ack