2

次のコードを実行する UIToolbarButton に関連付けられた IBAction メソッドがあります。

UIDatePicker は、ユーザーに時刻を表示するためだけに設定されています。したがって、ピッカーはランダムに日付を選択します。日付が今日の場合もあれば、明日の場合もあります。ピッカーが常に選択した時間を選択するようにします(ただし、常に将来)。たとえば、ユーザーが 1 月 1 日の午前 6:00、午後 10:00 を選択した場合、1 月 2 日の午前 6:00 を保存する日付が必要です。

次の場合はそれを行う必要がありますが、50% の確率で NSLog が一方の回答を返し、50% の確率で他方を返します。

if (self.picker.date >= [NSDate dateWithTimeIntervalSinceNow:0]) {
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    NSDate *pickerdate = self.picker.date;
    [defaults setObject:pickerdate forKey:@"pickerdate"];
    [defaults synchronize];
    NSLog(@"The date is more than now. Pickerdate is %@",pickerdate);
}
else {
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    NSCalendar*       calendar = [[NSCalendar alloc] initWithCalendarIdentifier: NSGregorianCalendar];
    NSDateComponents* components = [[NSDateComponents alloc] init];
    components.day = 1;
    NSDate * pickerdate = [calendar dateByAddingComponents: components toDate: self.picker.date options: 0];
    [defaults setObject:pickerdate forKey:@"pickerdate"];
    [defaults synchronize];
    NSLog(@"The date is less than now. Pickerdate is %@",pickerdate);
}

編集:コードが変更されました。私のロジックは逆でしたが、問題は残っています。

4

1 に答える 1

1

(または同様の) 演算子を使用して 2 つのオブジェクト>=を比較することはできません。NSDateこれらはオブジェクトです。メソッドを使用しcompare:て、2 つの日付を比較する必要があります。あなたが持っているように、あるオブジェクトポインターが別のオブジェクトポインターより大きいか等しいかどうかを比較しています。間違いなくあなたが望むものではありません。

適切な置き換えは次のようになります。

if ([self.picker.date compare:[NSDate date]] != NSOrderAscending) {

[NSDate date]と同じ結果が得られることに注意してください[NSDate dateWithTimeIntervalSinceNow:0]

于 2013-04-18T04:08:33.417 に答える