1

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

我希望 UILabel 每天显示一项。

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

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

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

谢谢!

4

2 回答 2

4

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

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

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

于 2013-07-14T22:45:25.603 回答
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

于 2013-07-15T00:15:21.063 回答