2013-07-14 61 views
0

我有一個隨機顯示我提供的列表中的文本的UILabel。如何每天更新一次UILabel

我希望UILabel每天顯示一個項目。

處理這個問題的最佳方法是什麼?

我應該使用NSTimer還是有不同的方法?

我並不擔心每天的特定時間,只是UILabel每天更新一次。

謝謝!

+0

該應用程序將全天候運行嗎? – Wain

+0

不,該應用程序不會運行。但是,如果用戶不會從mulitask中殺死該應用並將其打開,那麼如果這是新的一天,我仍然需要更改該標籤。 –

+0

可能最好的方法是使用*本地通知*,除了在NSUserDefaults中隱藏下一個觸發時間。 –

回答

3

一個選項是在顯示標籤時將當前日期保存到NSUserDefaults

當你的視圖控制器加載時,你從NSUserDefaults得到這個日期。如果保存日期和「now」之間的差異超過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://stackoverflow.com/a/15537806/1144632

+0

我無法使用NSCalendarUnitDay。此代碼與我想要的相反。每次我打開應用程序,標籤都會更新爲新文本。 –

+0

在我的系統上正常工作。我只是測試了代碼。 – danielbeard

+0

仍在測試。我的標籤沒有改變。這是否每24小時更改一次?還是在午夜?最好是希望標籤每天午夜改變。 –