我在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上),问题不会在模拟器上复制。
我找不到我做错了什么。我希望其他人遇到过类似的问题,可以帮我解决这个问题。
答案 0 :(得分: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。这必须强制调用编译器设置器和getter。
我完全不明白为什么不使用'self'导致它表现得如此奇怪。但是,是的,我会更谨慎地为我的变量使用正确的setter。
感谢您抽出时间查看我的问题。
答案 1 :(得分: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];
}
这将有效,