我有一個隨機顯示我提供的列表中的文本的UILabel。如何每天更新一次UILabel
我希望UILabel每天顯示一個項目。
處理這個問題的最佳方法是什麼?
我應該使用NSTimer還是有不同的方法?
我並不擔心每天的特定時間,只是UILabel每天更新一次。
謝謝!
我有一個隨機顯示我提供的列表中的文本的UILabel。如何每天更新一次UILabel
我希望UILabel每天顯示一個項目。
處理這個問題的最佳方法是什麼?
我應該使用NSTimer還是有不同的方法?
我並不擔心每天的特定時間,只是UILabel每天更新一次。
謝謝!
一個選項是在顯示標籤時將當前日期保存到NSUserDefaults
。
當你的視圖控制器加載時,你從NSUserDefaults
得到這個日期。如果保存日期和「now」之間的差異超過24小時,則更新標籤(並保存新日期),否則顯示當前標籤。
您可能還希望視圖控制器偵聽「將進入前景」通知。每次您的應用程序返回到前臺時,您都需要執行相同的檢查。
在偏好設置中存儲日期,並在應用程序進入前臺時進行比較。你的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
我無法使用NSCalendarUnitDay。此代碼與我想要的相反。每次我打開應用程序,標籤都會更新爲新文本。 –
在我的系統上正常工作。我只是測試了代碼。 – danielbeard
仍在測試。我的標籤沒有改變。這是否每24小時更改一次?還是在午夜?最好是希望標籤每天午夜改變。 –
該應用程序將全天候運行嗎? – Wain
不,該應用程序不會運行。但是,如果用戶不會從mulitask中殺死該應用並將其打開,那麼如果這是新的一天,我仍然需要更改該標籤。 –
可能最好的方法是使用*本地通知*,除了在NSUserDefaults中隱藏下一個觸發時間。 –