[英]Label not refreshing with the correct date
我有一个标签和两个箭头按钮。 当我按左箭头时,我想显示的时间比该日期短一天。 当我按向右箭头时,应该增加一天。
目前,这是我的代码。
- (IBAction)addDay:(id)sender {
NSDateComponents *dayComponent = [[NSDateComponents alloc] init];
dayComponent.day = 1;
NSCalendar *theCalendar = [NSCalendar currentCalendar];
NSString *dateNow = _lblDate.text;
// Convert string to date object
NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setDateFormat:@"EE. d MMMM YYYY"];
NSDate *date = [dateFormat dateFromString:dateNow];
date = [theCalendar dateByAddingComponents:dayComponent toDate:date options:0];
NSString *dateString = [dateFormat stringFromDate:date];
_lblDate.text = dateString;
}
- (IBAction)deleteDay:(id)sender {
NSDateComponents *dayComponent = [[NSDateComponents alloc] init];
dayComponent.day = 1;
NSCalendar *theCalendar = [NSCalendar currentCalendar];
NSString *dateNow = _lblDate.text;
// Convert string to date object
NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setDateFormat:@"EE. d MMMM YYYY"];
NSDate *date = [dateFormat dateFromString:dateNow];
date = [theCalendar dateByAddingComponents:dayComponent toDate:date options:0];
NSString *dateString = [dateFormat stringFromDate:date];
_lblDate.text = dateString;
}
但是由于某种原因,日期是错误的。 添加和删除日期时没有模式。
有谁能够帮助我 ?
亲切的问候
我不确定这是主要问题,但是在- (IBAction)deleteDay:(id)sender
, dayComponent.day = 1;
应该是dayComponent.day = -1;
。
我看到两个问题。
尝试进行以下更改:
- (IBAction)deleteDay:(id)sender {
NSDateComponents *dayComponent = [[NSDateComponents alloc] init];
dayComponent.day = -1;
/* snip */
}
和...
[_lblDate performSelectorOnMainThread:@selector(setText:) withObject:dateString waitUntilDone:NO];
您添加的代码正确。 但是,依靠字符串到日期的转换会产生问题。 我建议您将NSDate
对象用作实例变量,然后在第二天或前一天更新该实例变量。 更新值后,您可以使用dateformatter从该日期检索字符串。 现在,当您使用标签的文本生成日期时,就会产生问题。 这样便可以做到
// currentDate is my instance variable.
currentDate = [[NSDate date] retain];
NSDateFormatter *dateFormat = [[[NSDateFormatter alloc] init] autorelease];
[dateFormat setDateFormat:@"EE. d MMMM YYYY"];
dateLabel.text = [dateFormat stringFromDate:currentDate];
这就是您的第二天功能的样子
(IBAction)nextDay:(id)sender {
NSDateComponents *dayComponent = [[NSDateComponents alloc] init];
dayComponent.day = 1;
NSCalendar *theCalendar = [NSCalendar currentCalendar];
NSDateFormatter *dateFormat = [[[NSDateFormatter alloc] init] autorelease];
[dateFormat setDateFormat:@"EE. d MMMM YYYY"];
currentDate = [[theCalendar dateByAddingComponents:dayComponent toDate:currentDate options:0] retain];
NSString *dateString = [dateFormat stringFromDate:currentDate];
dateLabel.text = dateString;
}
这是前一天
enter code here
(IBAction)previousDay:(id)sender {
NSDateComponents *dayComponent = [[NSDateComponents alloc] init];
dayComponent.day = -1;
NSCalendar *theCalendar = [NSCalendar currentCalendar];
NSDateFormatter *dateFormat = [[[NSDateFormatter alloc] init] autorelease];
[dateFormat setDateFormat:@"EE. d MMMM YYYY"];
currentDate = [[theCalendar dateByAddingComponents:dayComponent toDate:currentDate options:0] retain];
NSString *dateString = [dateFormat stringFromDate:currentDate];
dateLabel.text = dateString;
}
要添加一天,您需要添加一天的TimeInterval,如下所示
NSDate *newDate1 = [date addTimeInterval:60*60*24];
要减去一天,请执行以下操作
NSDate *newDate2 = [date addTimeInterval:-60*60*24];
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.