【问题标题】:How to update a UILabel once per day如何每天更新一次 UILabel
【发布时间】:2013-07-14 22:35:08
【问题描述】:

我有一个 UILabel,它会随机显示我提供的列表中的文本。

我希望 UILabel 每天显示一项。

处理这个问题的最佳方法是什么?

我应该使用 NSTimer 还是有其他方法?

我不担心一天中的特定时间,只是 UILabel 每天更新一次。

谢谢!

【问题讨论】:

  • 应用程序是否会 24/7 全天候运行?
  • 不,应用程序不会运行。但是,如果用户没有从 mulitask 中终止应用程序并打开它,那么如果是新的一天,我仍然需要更改标签。
  • 除了在 NSUserDefaults 中存储下一个触发时间之外,最好使用 本地通知

标签: ios objective-c uiview uilabel nstimer


【解决方案1】:

一种选择是在显示标签时将当前日期保存到NSUserDefaults

当您的视图控制器被加载时,您会从NSUserDefaults 获得该日期。如果保存日期和“现在”之间的差异超过 24 小时,则更新标签(并保存新日期),否则显示当前标签。

您可能还希望视图控制器侦听“将进入前台”通知。每次您的应用返回前台时,您都需要进行相同的检查。

【讨论】:

    【解决方案2】:

    将日期存储在首选项中,并比较应用何时进入前台。你的 appDelegate 看起来像这样:

    - (void)applicationDidEnterBackground:(UIApplication *)application
    {
        NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
        [prefs setObject:[NSDate date] forKey:@"savedDate"];
        [prefs synchronize];
    }
    
    - (void)applicationDidBecomeActive:(UIApplication *)application
    {
        NSDate *savedDate = [[NSUserDefaults standardUserDefaults] objectForKey:@"savedDate"];
        NSDateComponents *dateComponents = [[NSCalendar currentCalendar] components:NSCalendarUnitDay fromDate:savedDate toDate:[NSDate date] options:0];
        if ([dateComponents day] >= 1) {
            [[NSNotificationCenter defaultCenter] postNotificationName:@"updateLabel" object:nil];
        } 
    }
    

    然后在你的视图控制器中,监听通知:

    -(void) viewWillAppear:(BOOL)animated {
        [super viewWillAppear:animated];
        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(updateLabel) name:@"updateLabel" object:nil];
    }
    
    -(void) viewWillDisappear:(BOOL)animated {
        [super viewWillDisappear:animated];
        [[NSNotificationCenter defaultCenter] removeObserver:self];
    }
    
    -(void) updateLabel {
        //update your label here
    }
    

    如需在午夜更新,请查看UIApplicationSignificantTimeChangeNotification。这里有相关答案:https://stackoverflow.com/a/15537806/1144632

    【讨论】:

    • 我无法使用 NSCalendarUnitDay。这段代码与我想要的相反。每次我现在打开应用程序时,标签都会更新为新文本。
    • 仍在测试中。我的标签没有改变。这会从最初运行时每 24 小时更改一次吗?还是半夜?最好希望标签在每天午夜更改。
    • 这会在一天后发生变化(通常是 24 小时,但有时在夏令时等情况下会使其成为不同的值)。您可以使用 UIApplicationSignificantTimeChangeNotification 来处理您的情况。看看这个答案:stackoverflow.com/a/15537806/1144632
    猜你喜欢
    • 1970-01-01
    • 2015-08-31
    • 2021-12-09
    • 1970-01-01
    • 2015-04-17
    • 2022-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多