如何每天更新一次 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的主要内容,如果未能解决你的问题,请参考以下文章