2016-06-30 55 views
0

我正在編寫一個基本的報價應用程序,我想添加一個「每日報價」。我有一個帶引號/作者的NSObject,也是一個隨機引用引號的函數。每天更換標籤

 let range: UInt32 = UInt32(quotes.count) //my array is called quotes 
     let randomNumber = Int(arc4random_uniform(range)) 
     let quote = quotes[randomNumber] 
     let quoteString = quote.quote 
     let authorString = quote.person 

     self.quoteLabel.text = quoteString 
     self.personLabel.text = authorString 

如何創建一個功能,即報價僅爲每天更換(午夜/ 00:00?)

我一直在試圖使用的NSDate和的NSTimer,但瞭解到,這些會當應用程序關閉時會被取消。我也一直試圖執行此代碼Update Every Day in swift syntax - 但沒有任何結果。

我該如何在每天午夜更改報價,並在整個一天保持在那裏?

我是編程新手,非常感謝代碼的詳細解答,我只是編寫了幾個月的代碼 - 謝謝!

+0

的[確定是否發生改變天(http://stackoverflow.com/questions/8016119/determine-if-day-change-has-occurred) – EmilioPelaez

+0

記得可能的複製上次打開/刷新/加載日期,當你的應用程序打開時,確定是否應該通過簡單的日期算術加載新的報價。然後啓動計時器或安排本地通知來運行報價重新查詢。 – luk2302

+0

爲什麼不嘗試本地通知呢?安排64日通知未來64天中午,然後當獲得第64通知,然後再次更新爲下一個64日期。 –

回答

0

也許這樣的事情?遺憾的是,它是objc)

- (void)checkDateAndSwitchLabel 
{ 
    //get previous Cached data when label refreshed 
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
    NSInteger cachedDay = [defaults integerForKey:@"appDate"]; 
    NSInteger cachedHour = [defaults integerForKey:@"appDateHour"]; 

    //get current data 
    NSDateComponents *components = [[NSCalendar currentCalendar] components:NSCalendarUnitDay | NSCalendarUnitHour fromDate:[NSDate date]]; 
    NSInteger currentDay = [components day]; 
    NSInteger currentHour = [components hour]; 

    //compare 
    if (cachedDay - currentDay >= 1 || cachedHour > currentHour) { 
     //change Label 
    } 

    //save new values 
    [defaults setInteger:currentDay forKey:@"appDateDay"]; 
    [defaults setInteger:currentHour forKey:@"appDateHour"]; 
    [defaults synchronize]; 
} 
+0

試圖添加我的randomisation到你的//改變標籤 - >不行不行。在模擬器運行過程中,沒有報價/作者顯示在標籤中:(謝謝你的幫助,我敢肯定我們可以找出一些東西。) – Mate

+0

我將你的代碼翻譯成swift,並將其放到我的viewDidLoad函數中 - 沒有結果@NikKov – Mate

+0

這是一個例子,如何做到這一點,我沒有嘗試這個代碼,但概念可以是這樣的 –