gpt4 book ai didi

ios - UIDatePicker 和日期未正确存储

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:43:34 25 4
gpt4 key购买 nike

我有一个绑定(bind)到运行以下代码的 UIToolbarButton 的 IBAction 方法。

UIDatePicker 仅设置为向用户显示时间。 因此,选择器随机选择日期:有时是今天,有时是明天。我希望选择器始终选择选定的时间(但总是在将来)。例如如果用户在 1 月 1 日晚上 10:00 选择早上 6:00,我希望日期存储在 1 月 2 日早上 6:00。

下面的 if 应该这样做,但是 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);
}

编辑:代码已修改,我的逻辑是倒退的,但问题仍然存在。

最佳答案

您不能使用 >=(或类似的)运算符来比较两个 NSDate 对象。这些是对象。您必须使用 compare: 方法来比较两个日期。当你拥有它时,你正在比较一个对象指针是否大于或等于另一个对象指针。绝对不是你想要的。

正确的替换应该是:

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

请注意,[NSDate date] 给出的结果与 [NSDate dateWithTimeIntervalSinceNow:0] 相同。

关于ios - UIDatePicker 和日期未正确存储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16073664/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com