我有一个UILabel随机显示我提供的列表中的文本。
我希望UILabel每天展示一件商品。
处理此问题的最佳方法是什么?
我应该使用NSTimer还是有不同的方法?
我并不担心当天的特定时间,只是UILabel每天更新一次。
谢谢!
答案 0 :(得分:3)
一种选择是在显示标签时将当前日期保存到NSUserDefaults
。
加载视图控制器后,您将从NSUserDefaults
获取该日期。如果保存日期与“现在”之间的差异超过24小时,则更新标签(并保存新日期),否则显示当前标签。
您可能还希望视图控制器侦听“将输入前景”通知。每次您的应用返回到前台时,您都需要进行相同的检查。
答案 1 :(得分: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