4

iPhoneでアプリを起動しようとすると、不思議なクラッシュが発生します(ただし、シミュレーターでは完全に有効です)。問題はこの2つの方法にあると思います。

-(void)viewWillAppear:(BOOL)animated{
    [self getValueFromPicker];
}


-(void)getValueFromPicker{

    NSDate *now = [NSDate date];

    NSDate *birthDate = self.birthdayPicker.date;

    NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
    NSDateComponents *components = [calendar components:NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit
                                               fromDate:now
                                                 toDate:birthDate
                                                options:0];

    NSLog(@"Difference in years %i/", components.year);

}

SIGABRT エラーでアプリがクラッシュし、コンソールに表示されるテキストがあります。Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Invalid parameter not satisfying: date'

私を助けてください、私は本当に私が何を間違えたのか分かりません、私がコンソールのシミュレーターで同じことをしたとき、私は今の日付と日付からの年の違いを見ることができます、ユーザーが選びました。

更新:[selfdefaultBirthdayPickerDate]を削除した後; viewDidLoadセクションで動作を開始します。しかし、現在、ピッカーは現在の日付を表示します。誕生日の日付を選択するのにはあまり便利ではありません。現在の日付を現在から過去に変更する必要があります。

4

4 に答える 4

8

nilほとんどの場合、日付を適用するときにこのタイプのエラーが生成されself.birthdayPicker.dateますnilifそしてあなたがnil価値を得る適切な状態を与えてくださいUIDatePicker.

于 2013-03-05T09:07:35.970 に答える
1

問題はここにあると思います:

NSDateComponents *components = [calendar components:NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit
                                               fromDate:now
                                                 toDate:birthDate
                                                options:0];

あなたfromDateは より高いですtoDate

次のように変更します。

NSDateComponents *components = [calendar components:NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit
                                               fromDate:birthDate
                                                 toDate:now
                                                options:0];
于 2013-03-05T08:52:23.333 に答える
1

NSDateFormatter のロケールを設定する必要があります。米国ロケールで iPhone 設定をセットアップしてから、12/24 設定をいずれかのオプションに設定します。
そのためには、iPhone の設定パネルを調べる必要があります。

これがうまくいくことを願っています。

于 2013-03-05T09:50:48.150 に答える
0

次のように、ピッカーのデフォルト値を設定する方法もあります。

-(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];
}

コンソールの完全なクラッシュ レポートは次のとおりです。

2013-03-05 13:15:12.982 DeathLine[2506:907] *** Assertion failure in -[_UIDatePickerView _setDate:animated:forced:], /SourceCache/UIKit/UIKit-2380.17/_UIDatePickerView.m:302
2013-03-05 13:15:12.985 DeathLine[2506: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 0x35a6b 0x358db 0x3432b595 0x3438014b 0x34380091 0x3437ff75 0x3437fe99 0x3437f5d9 0x3437f4c1 0x3436db93 0x2908c33 0x3436d833 0x343f70c5 0x343f7077 0x343f7055 0x343f690b 0x343f6e01 0x3431f5f1 0x3430c801 0x3430c11b 0x360225a3 0x360221d3 0x324d9173 0x324d9117 0x324d7f99 0x3244aebd 0x3244ad49 0x360212eb 0x34360301 0x2dc21 0x3a658b20)
libc++abi.dylib: terminate called throwing an exception
于 2013-03-05T09:19:08.517 に答える