2011-08-03 7 views
0

私は最近、入力された日付から患者の年齢を計算する医療アプリに機能を追加しました。年齢がゼロの場合、日付ピッカーは1950年1月1日を出生日の入力のデフォルトの開始日として表示します。このコードは、iPhoneとiPadハードウェアのiOS 4.0以降で正常に動作します。しかし、アプリのアップデートを提出する直前にテストすると、iOS 3.1.3のテスト用に保管している第1世代のiPodで日付ピッカーがクラッシュすることが判明しました。私は、日付ピッカーのデフォルトの日付を設定します犯人として、次のコードを絞り込ん:日付ピッカーコードの問題

if (age == 0) { 
     NSDateFormatter *myFormatter = [[NSDateFormatter alloc] init]; 
     [myFormatter setDateFormat:@"M/d/yy"]; 
     NSDate *initialDate = [myFormatter dateFromString:@"January/01/1950"]; 
     [picker setDate:initialDate animated:YES]; 
    } 

のiPodからのログは、クラッシュの後に以下の2行を示しています。

<Warning>: *** Assertion failure in -[UIDatePickerView _updateBitsForDate:andReload:animateIfNeeded:], /SourceCache/UIKit/UIKit-984.38/UIDatePicker.m:908 

<Error>: *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Invalid parameter not satisfying: date' 

このクラッシュが旧式のデバイスでのみ発生する理由とその解決方法を理解していただければ幸いです。前もって感謝します。

+0

_updateBitsForDate:andReload:animateIfNeeded:カスタムメソッドになります。コードを投稿してください。 – msgambel

+0

@MSgambel: '_updateBitsForDate:andReload:animateIfNeeded:'はAppleの内部メソッドです。 – titaniumdecoy

答えて

3

tr35-10標準によれば、日付形式はMMMM/dd/yyyyである必要があります。

また、cache formatters for efficiencyにする必要があります。

+0

ありがとうございました。コード内の "M/d/yy"を "MMMM/dd/yyyy"に変更すると問題が解決しました。私は、iOS 4がiOS 3よりももっと寛容であると考えています。この問題は、サポートされているすべてのハードウェアでアップデートをテストする価値も私に示されました。 – user183804