如何每天更新一次UILabel

时间:2013-07-14 22:35:09

标签: ios objective-c uiview uilabel nstimer

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

我希望UILabel每天展示一件商品。

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

我应该使用NSTimer还是有不同的方法?

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

谢谢!

2 个答案:

答案 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