问题已更新:
我有一个应用程序,用户可以在其中添加一个新的研讨会,包括他从UIDatePicker
中选择的研讨会日期。之后,用户可以编辑研讨会的信息,包括更改日期。我想要做的是以下内容:
1.阅读用户在添加新研讨会时从UIDatePicker
中选择的时间。
2.将日期转换为字符串并将其保存在数据库中。
3.当用户想要编辑研讨会时,我应该从数据库中检索研讨会的日期并将其从字符串转换为NSDate
。
4.将编辑界面中的UIDatePicker
设置为我刚刚创建的NSDate
。
我认为这听起来很合乎逻辑。然而,它不适合我,我不知道为什么。这是代码:
<{1>}类中的
AddWorkshop.m
NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setDateStyle:NSDateFormatterMediumStyle];
//WSDate is a NSString variable
self.WSDate = [dateFormat stringFromDate:[sender date]];
类中的
EditWorkshop.m
问题是:
NSDateFormatter *df = [[NSDateFormatter alloc] init];
[df setDateStyle:NSDateFormatterMediumStyle];
NSDate *date1 = [df dateFromString: self.WSDate];
[self.datePicker setDate:date1];
日期不会更改到指定日期,它始终显示今天的日期。
当我尝试NSLog date1和self.WSDate时,date1的值总是减去一天,然后是UIDatePicker
的值
我在[UIDatePicker setDate:NSDate]中传递的日期是否有特定格式?例如:它必须是“MMMM dd yyyy”或“mm-dd-yyyy”或任何格式都可以吗?
答案 0 :(得分:0)
广告1:您要更新viewDidLoad
的{{1}}仅在加载视图时调用一次。所以这可能是你的问题。尝试从UIDatePicker
或viewWillAppear:
广告2:这很可能是时区问题。尝试将日期存储为viewDidAppear:
,而不是在NSDate
和NSDate
之间来回转换。
广告3:NSString
需要setDate:
,其中没有格式。把它想象成整数。
答案 1 :(得分:0)
永远不要将NSDate
作为NSString
存储在您的数据库中,请始终尝试将其存储为时间戳,就像核心数据一样。
对于您当前的问题,以下是可以帮助您的代码,我在IBAction
使用UIButton
,它会在NSString
中显示已转换的UIDatePicker
日期控制。
- (IBAction)buttonPressed:(id)sender{
// set date of picker from string
NSDate *convertedDate = [self convertStringToDate];
if (convertedDate!=nil) {
[self.datePicker setDate:convertedDate animated:YES];
}else{
// Display any error here
}
}
- (NSDate*)convertStringToDate{
NSDateFormatter *SDF = [[NSDateFormatter alloc]init];
[SDF setDateStyle:NSDateFormatterMediumStyle];
NSDate *convertedDate = [SDF dateFromString:[self convertTodaysDateintoString]];
return convertedDate;
}
- (NSString*)convertTodaysDateintoString{
NSDateFormatter *df = [[NSDateFormatter alloc]init];
[df setDateStyle:NSDateFormatterMediumStyle];
NSString *str = [df stringFromDate:[self getTodaysDate]];
return str;
}
- (NSDate*)getTodaysDate{
return [NSDate date];
}
对于第2期问题,请验证您的时区,我目前尚不确定问题3,我还没有看到UIDatePicker
的任何特定日期格式,它只接受NSDate
。
对于3我建议检查UIDatePicker
模式,同时尝试在XIB / storyboard属性检查器中将local设置为default。
答案 2 :(得分:0)
经过几周的尝试后,我发现问题是我在UIDatePicker
viewDidLoad
self.datePicker = [[UIDatePicker alloc]init];
因此,当我使用[datePicker setDate: date];
时,它不起作用。我不知道究竟是为什么。但对我来说就是这样。我刚刚删除了self.datePicker = [[UIDatePicker alloc]init];
并且setDate方法有效。
如果有人可以解释为什么分配UIDatePicker
使setDate
方法失效,我会很高兴。我认为我需要分配所有新对象才能使用它们,因为例如当我创建一个新的NSMutableArray
时,如果我不首先分配它,我就无法添加它。
谢谢大家的努力。