如何每天更新一次 UILabel

Posted

技术标签:

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

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

我希望 UILabel 每天显示一项。

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

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

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

谢谢!

【问题讨论】:

应用程序是否会 24/7 全天候运行? 不,应用程序不会运行。但是,如果用户没有从 mulitask 中终止应用程序并打开它,那么如果是新的一天,我仍然需要更改标签。 除了在 NSUserDefaults 中存储下一个触发时间之外,最好使用 本地通知 【参考方案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://***.com/a/15537806/1144632

【讨论】:

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

以上是关于如何每天更新一次 UILabel的主要内容,如果未能解决你的问题,请参考以下文章

如何一次将数据插入和更新到 EF 多个表中

如何每天重复一次 UNUserNotification?

如何使用 linq to sql 一次更新多行?

如何在ios中每n秒获取一次位置更新

python如何让程序每天只运行一次

一年内每天如何只使用一次查询获取数据?