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”的情况下调用视图,则选择器返回“今天日期”。这就是我的 pickerView 被调用的“第一次”。随后对视图的每次调用,没有“当前日期”,都会给我一个不同的和更晚的日期。所以,

我第一次得到今天的日期说 9 Jun 2010
第二次 datePicker.date 返回 10 Jun 2010
第三次 11 Jun 2010 等等。虽然它并不总是增量的,但大多数情况下是增量的。

我已经放置了 NSLogs,并验证了初始日期设置是否正确。

问题仅出现在设备上(在 OS 3.0 上),问题未在模拟器上复制。

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

4

2 回答 2

5

问题终于解决了。列出为我解决问题的原因,因此如果其他人遇到类似问题,他们可以尝试这些步骤

我做了两件事
1. 设置 datePicker 的语言环境和日历 -

NSLocale *locale = [NSLocale currentLocale];
[dateFormatter setLocale:locale];

self.datePicker.locale = locale; 
self.datePicker.calendar = [locale objectForKey:NSLocaleCalendar];

但仅此一项并不能解决问题。
2. 我在每个对 datePicker 的引用之前都添加了“self”,即将所有 datePicker 替换为 self.datePicker。这必须强制调用编译器设置器和获取器。

我不完全理解为什么不使用“自我”会导致它表现得如此奇怪。但是,是的,我会更加小心地为我的变量使用正确的设置器。

感谢您花时间查看我的问题。

于 2010-06-09T22:49:09.690 回答
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];
}

这会起作用,

于 2010-12-20T15:12:25.707 回答