繁体   English   中英

标签未以正确的日期刷新

[英]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)senderdayComponent.day = 1; 应该是dayComponent.day = -1;

我看到两个问题。

  1. 实际上并没有将一天递减(看起来像加法吗?)
  2. 不更新主线程上的UI。

尝试进行以下更改:

- (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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM