将日期设置为日期选择器

时间:2013-08-06 02:03:41

标签: iphone objective-c nsuserdefaults uidatepicker

我创建了一个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"];

现在挑选者的工作方式如何。

3 个答案:

答案 0 :(得分: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"];

答案 1 :(得分:1)

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

[datepicker setDate:selectedDate];

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

要解决此问题,您需要在调用selectedDate之前将[datepicker setDate:]设置为某个日期

答案 2 :(得分:0)

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

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

代码:

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
selectedDate = [defaults objectForKey:@"selectedDate"]; 
if(selectedDate){
    [datepicker setDate:selectedDate];
}