1

私はいくつかのNSDateオブジェクトを使用していますが、iPhoneを24時間形式で使用しているため、アプリをテストしたところ、すべて問題なく動作しましたが、友人の1人がiPhoneでアプリを試しましたが、彼は12時間を使用しています。フォーマット、いくつかの調査の結果、問題は日付であることがわかりました。これを使用して日付ピッカーと時間ピッカーを設定する理由がわからないため、データベースからいくつかの値を読み取りました(はい、チェックしました値とそれらは正しいです、それは値の問題ではありません)、したがって、このすべてのデータはフォーマットされ、NSDateとしてまとめられます。次に、作成したばかりのこの日付で日付ピッカーと時間ピッカーを設定します

NSDateFormatter *currentDate = [[[NSDateFormatter alloc] init] autorelease];
[currentDate setDateFormat:@"yyyy-MM-dd HH:mm"];
NSDate * startDate =[currentDate dateFromString:[NSString stringWithFormat:@"%d-%d-%d %d:%d",yearVal,monthVal,dayVal,hourVal,minVal]];
[datePicker setDate:startDate];
[timePicker setDate:startDate];

つまり、yearVal、monthVal、dayVal、hourVal、minValはすべてNSIntegerです...つまり、iPhone / iPodが時計の設定で24時間を使用している場合は完全に機能しますが、12時間形式を使用している場合はクラッシュし、このエラーメッセージが表示されます

> *** Assertion failure in -[UIDatePickerView _updateBitsForDate:forced:andReload:animateIfNeeded:], /SourceCache/UIKit/UIKit-1914.85/UIDatePicker.m:1200 2012-06-29
> 01:19:15.753 MyApp[1215:707] *** Terminating app due to uncaught
> exception 'NSInternalInconsistencyException', reason: 'Invalid
> parameter not satisfying: date'
> *** First throw call stack: (0x3710188f 0x34e06259 0x37101789 0x379403a3 0x31042807 0x30f616c5 0x30f61563 0x31042385 0xf48ef 0xf7bd3
> 0x30e0ec8b 0x30e1b1e9 0x30e1b059 0x30e1af3f 0x30e1a7c1 0x30e1a503
> 0x30e0eaff 0x30e0e7d5 0xdd945 0x30e8793d 0x30f01627 0x37972933
> 0x370d5a33 0x370d5699 0x370d426f 0x370574a5 0x3705736d 0x33816439
> 0x30e03cd5 0xd4cbb 0xd4c60) terminate called throwing an
> exception(gdb)

ですから、これを修正する方法について何か考えがあれば、私はあなたの助けをいただければ幸いです

ああ、HHは24時間形式で時間を返すことを読んだのですが、私のアプリはすべてHHを使用しているので、印刷先のNSLogの一部で「am」または「pm」を監視し続ける理由がわかりません。デバッグ

前もって感謝します

申し訳ありませんが、行にコメントするとほとんど忘れてしまいます

[datePicker setDate:startDate];
[timePicker setDate:startDate];

アプリはクラッシュしませんが、もちろん、必要な日時は表示されません

注:24時間形式を使用する必要があります。午後に形式を選択する場合は、すべてのアプリを変更する必要があります。そのための十分な時間がありません。

4

1 に答える 1

10

次のように見てください:ユーザーが12/24時間制を好むかどうかを調べますか?…2番目の答えがあなたにとって最善かもしれないと思います。次に、ユーザーのデバイスが12時間制と24時間制のどちらを使用しているかに応じて、[currentDate setDateFormat:....]を適宜設定できます。

12時間制が必要な場合は、currentDateを次のように設定します。

[currentDate setDateFormat:@"yyyy-MM-dd h:mm:ss a"];

24時間制が必要な場合は、currentDateを次のように設定します。

[currentDate setDateFormat:@"yyyy-MM-dd HH:mm"];
于 2012-06-29T18:03:29.867 に答える