2

数時間前に投稿を作成しましたが、それは正しくありませんでした。クラッシュの原因について誤解していました。だから私はそれを再投稿しました、あなたが私を責めないことを願っています.

datePicker を所有するビューを取得しました。私のポイントは、ピッカーで現在の日付ではなく、「古い」日付を表示することです (1987 年を選択します)。シミュレーターでアプリを起動すると問題なく動作しますが、iPhone アプリに切り替えるとビューが読み込まれる前にクラッシュします。コードがあります:

-(void)defaultBirthdayPickerDate{

    NSString *dateString = @"09-Oct-1987";
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc]init];
    dateFormatter.dateFormat = @"dd-MMM-yyyy";
    NSDate *date = [dateFormatter dateFromString:dateString];
    [self.birthdayPicker setDate:date];

}

それで:

- (void)viewDidLoad
{

    [self defaultBirthdayPickerDate];
    [super viewDidLoad];
}

どこかで何かがクラッシュを引き起こすことがあります:

2013-03-05 15:50:31.070 DeathLine[2985:907] *** Assertion failure in -[_UIDatePickerView _setDate:animated:forced:], /SourceCache/UIKit/UIKit-2380.17/_UIDatePickerView.m:302
2013-03-05 15:50:31.073 DeathLine[2985:907] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Invalid parameter not satisfying: date'
*** First throw call stack:
(0x325042a3 0x3a22197f 0x3250415d 0x32dd9ab7 0x344bdf15 0x344c6429 0x3458f989 0x14a6b 0x148db 0x3432b595 0x3438014b 0x34380091 0x3437ff75 0x3437fe99 0x3437f5d9 0x3437f4c1 0x3436db93 0x28f4c33 0x3436d833 0x343f70c5 0x343f7077 0x343f7055 0x343f690b 0x343f6e01 0x3431f5f1 0x3430c801 0x3430c11b 0x360225a3 0x360221d3 0x324d9173 0x324d9117 0x324d7f99 0x3244aebd 0x3244ad49 0x360212eb 0x34360301 0xcc21 0x3a658b20)
libc++abi.dylib: terminate called throwing an exception

どういうわけか[self.birthdayPicker.date]NULLではないことはわかっていますが、問題を修正する方法がわかりません。

4

3 に答える 3

3

NSLocale私の推測では、これは、デバイスとシミュレーターで設定された異なるロケール ( ) が原因であると思われます。09-Oct-1987フォーマッターのロケールが英語に設定されている場合にのみ、日付をフォーマッターで解析できることに注意してください (in EnglishOctを表すためOctober)。それ以外の場合は戻りnil、に設定nilするとUIDatePicker、表示されているエラーが発生します。

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
dateFormatter.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en"];
于 2013-03-05T12:01:08.050 に答える
1

dateおそらくnilです。フォーマッタが期待どおりに機能しているかどうかを確認する必要があります。

于 2013-03-05T11:56:46.217 に答える
1

これを試してください

-(void)defaultBirthdayPickerDate{
    [self.birthdayPicker setDatePickerMode:UIDatePickerModeDate];
    NSString *dateString = @"09-Oct-1987";
    NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
    [dateFormat setDateFormat:@"dd-MMM-yyyy"];
    if([dateFormat dateFromString: dateString])
    {
        NSDate *date = [dateFormat dateFromString: dateString];
        [self.birthdayPicker setDate:date];
    }
    [dateFormat release];
}

- (void)viewDidLoad{
     [super viewDidLoad];   //super method should be first in you code
     [self defaultBirthdayPickerDate];
}

DatePickerMode を UIDatePickerModeDate に設定してみてください。これで問題が解決する場合があります

于 2013-03-05T12:00:09.287 に答える