我创建了一个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;
我试过这段代码而且收到错误
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 *'
我以为这就是说dateForKey
NSDate *selectedDate = [defaul dataForKey:@"selectedDate"];
所以我把它改成了
NSDate *selectedDate = [defaul objectForKey:@"selectedDate"];
现在挑选者的工作方式如何。
答案 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];
}