-4

我制作了一个 datePicker,我想在再次使用 datePicker 时显示上次使用的日期。我已将 datePicker 保存为用户默认值,并尝试将日期设置为我保存的日期。这是我的代码:

datepicker = [[UIDatePicker alloc] init];
    datepicker.datePickerMode = UIDatePickerModeDate;
    [datepicker addTarget:self action:@selector(datePickerValueChanged:) forControlEvents:UIControlEventValueChanged];
    datepicker.timeZone = [NSTimeZone defaultTimeZone];
    datepicker.minuteInterval = 5;
    datepicker.datePickerMode = UIDatePickerModeTime;

    [datepicker setDate:selectedDate];

    [textfield setInputView:datepicker];

这是在价值确实发生了变化

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];

    NSDate *selectedDate = [datepicker date];

    [defaults setObject:selectedDate forKey:@"selectedDate"];

但我得到了错误

 Use of undeclared identifier 'selectedDate'

我需要在头文件中放一些东西吗?


编辑

我尝试将它放在头文件中,但是当我按下按钮以使用 datePicker 访问视图控制器时,应用程序现在崩溃了。它因未捕获的异常而崩溃。

 NSDate *selectedDate;

编辑 2

我尝试了此代码,但出现错误

 NSUserDefaults *defaul = [NSUserDefaults standardUserDefaults];

        if([[NSUserDefaults standardUserDefaults] objectForKey:@"selectedDate"] != nil) {

        NSDate *selectedDate = [defaul dataForKey:@"selectedDate"];

在pickerDidChange中

NSUserDefaults *defaul = [NSUserDefaults standardUserDefaults];

    NSDate *selectedDates = [datepicker date];

    [defaul setObject:selectedDates forKey:@"selectedDate"];

错误是Incompatible pointer types initializing 'NSDate *__strong' with an expression of type 'NSData *'


编辑 3

我以为这说 dateForKey NSDate *selectedDate = [defaul dataForKey:@"selectedDate"];

所以我把它改成

NSDate *selectedDate = [defaul objectForKey:@"selectedDate"];

现在选择器按我想要的方式工作。

4

3 回答 3

1

在第一个代码块中,您有这一行

[datepicker setDate:selectedDate];

但当时selectedDate还没有被初始化(因为valueDidChange没有被调用),这就是编译器抱怨的原因。

要修复它,您需要在调用之前selectedDate设置某个日期。[datepicker setDate:]

于 2013-08-06T02:41:11.773 回答
1

我认为:

你没有使用 ARC 也没有保留selectedDate

你可以:

。H

@property(retain,nonatomic) NSDate selectedDate;

.m

@synthesize selectedDate

- (void)dealloc
{
     self.selectedDate = nil;
     [super dealloc];
}

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];

//NSDate *selectedDate = [datepicker date];
self.selectedDate = [datepicker date];

[defaults setObject:selectedDate forKey:@"selectedDate"];
于 2013-08-06T02:33:02.520 回答
0

您忘记初始化您的实例变量 selectedDate,默认情况下它将为 nil 并导致崩溃,请在使用它设置 DatePicker 日期之前检查它是否为 nil。

编辑:在使用之前检查它是否为零,我已经告诉过你该怎么做。

代码:

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
selectedDate = [defaults objectForKey:@"selectedDate"]; 
if(selectedDate){
    [datepicker setDate:selectedDate];
}
于 2013-08-06T02:17:23.973 回答