首页 文章

UIDatePicker日期方法选错了日期:iPhone Dev

提问于
浏览
5

我在UIDatePicker上遇到了非常奇怪的行为 . 我有一个视图,在.h文件中声明的日期选择器为IBOutlet UIDatePicker * datePicker;具有非原子性和保留性 . datePicker在IB文件中正确链接 .

在代码中我设置了使用以下代码调用UICOntrolEventValueChanged的最小值,最大值,初始日期和操作

If (!currentDate) {
    initialDate = [NSDate date];
} else {
    initialDate = currentdate;
}

[datePicker setMinimumDate:[NSDate date]];
[datePicker setMaximumDate:[[NSDate date] addTimeInterval:5 * 365.25 * 24 * 60 * 60]]; // to get upto 5 years 
[datePicker setDate:initialDate animated:YES];

[datePicker addTarget:self action:@selector(getDatePickerValue:) forControlEvents:UIControlEventValueChanged];

在getDatePickerValue中,我使用datePicker.date获取新日期 .

当视图关闭时(使用完成按钮),我使用datePicker.date获取日期的当前值 .

现在,如果在没有'currentDate'的情况下调用视图,则选择器将返回'todays date' . 这就是我的pickerView被调用的'第一次'所发生的事情 . 对视图的每次后续调用,没有“当前日期”给我一个与今天不同的日期 . 所以,

我第一次得到今天的日期说2010年6月9日
第二次datePicker.date返回2010年6月10日
2010年6月11日第三次,等等 . 虽然它并不总是增量,但主要是它 .

我已经放置了NSLog,并验证了初始日期设置正确 .

问题仅出在设备上(在OS 3.0上),问题不会在模拟器上复制 .

我找不到我做错了什么 . 我希望其他人遇到类似的问题,可以帮我解决这个问题 .

2 回答

  • 3
    IBOUTLET UIDatePicker *datePicker;
    IBOUTLET UILabel *label;
    }
    -(void)click:(id)sender;
    
    
    - (void)viewDidLoad {
    
        [super viewDidLoad];
        NSDate *dateFromPicker = [[NSDate alloc]init];
        [date setDate:dat animated:YES];
    }
    -(void)click:(id)sender {
    
        NSDate *selectDate = [datePicker date];
        NSString *dateString = [NSString stringWithFormat:@"%@",selectDate];
    
        [label setText:dateString];
    }
    

    这会工作,

  • 5

    问题终于解决了 . 列出解决问题的方法,所以如果其他人遇到类似的问题,他们可以尝试这些步骤

    我做了两件事
    1.设置datePicker的区域设置和日历 -

    NSLocale *locale = [NSLocale currentLocale];
    [dateFormatter setLocale:locale];
    
    self.datePicker.locale = locale; 
    self.datePicker.calendar = [locale objectForKey:NSLocaleCalendar];
    

    但仅凭这一点并没有解决问题 .
    2.我在每次引用datePicker之前输入'self',即用self.datePicker替换所有datePicker . 这必须强制调用编译器setter和getter .

    我不完全理解为什么不使用'self'导致它表现得如此奇怪 . 但是,是的,我会更谨慎地为我的变量使用正确的setter .

    感谢您花时间看我的问题 .

相关问题