2016-08-10 40 views
-2

我開發了每天生成隨機鼓舞人心的報價iOS應用程序。在我關閉應用程序的那一刻,再次打開它並點擊生成每日報價的按鈕,它向我展示了一個新的報價。如何保存信息(SWIFT應用程序)

你能幫我,我怎麼能保存同一報價遍佈一天,當一天過去產生一個新的報價。我的意思是在早上的00:00。

我要保持每天1帖,而不是1報價爲我每次打開應用程序的時間。

+0

你會想看看[文檔](https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/UserDefaults/Introduction/Introduction.html#//apple_ref/doc/uid/ 10000059i)和[NSUserDefaults](https://developer.apple.com/library/ios/documentation/Cocoa/Reference/Foundation/Classes/NSUserDefaults_Class/)。沒有冒犯性,但是你提出的是一個非常基本的東西,這是有據可查的,也許你在研究之前投入一些時間在研究之前。 – Gero

+0

我一個星期前就開始了。我還是新的,不知道如何去做這些事情。對不起,如果我的問題對你來說太基本了,但你的答案對我來說還不清楚。如果你給我一個例子或簡單的代碼,我將不勝感激。謝謝。 –

回答

0

好吧,我有我的手一段時間,我可以爲您提供有關如何將數據保存到用戶默認設置一個小教程。

你會想,以節省您創建創建它,然後覈對您的每一個應用程序轉到前臺時間之後報價的日期。顯然,你只想記住一天,而不是幾小時,幾分鐘和幾秒鐘。下面是一個小功能:

func makeCleanToday() -> NSDate { 
    let today = NSDate() 
    let comps = NSCalendar.currentCalendar().components([.Day, .Month, .Year], fromDate: today) 
    return NSCalendar.currentCalendar().dateFromComponents(comps)! 
} 

注意,這強行解開就上線日期,但這是在這裏很好,因爲我什麼都不做,可能會導致dateFromComponents返回nil

接下來的兩行,你總是會打電話給你創建了報價之後:

let cleanToday = makeCleanToday() 
NSUserDefaults.standardUserDefaults().setObject(cleanToday, forKey: "MyAppDateKey") 

顯然,你應該使用更好的關鍵,以確定這(我建議某處定義一個常數這一點)。這會將您的日期(僅日,月和年)保存在應用程序的用戶默認值中。

下一次你的應用程序進入前景(使用此應用程序的委託),那麼做到這一點的位置:

if let savedDate:NSDate = NSUserDefaults.standardUserDefaults().objectForKey("MyAppDateKey") as? NSDate { 
    let cleanToday = makeCleanToday() 
    if savedDate.earlierDate(cleanToday) == savedDate { 
     // create new sentence 

     NSUserDefaults.standardUserDefaults().setObject(cleanToday, forKey: "MyAppDateKey") 
    } 
} else { 
    // create new sentence 

    NSUserDefaults.standardUserDefaults().setObject(makeCleanToday(), forKey: "MyAppDateKey") 
} 

請注意,我這裏補充兩個NSUserDefaults.standardUserDefaults().setObject....線只是爲了說明發生了什麼。您可能已經在您的報價創建方法中使用了該代碼,就像我之前告訴您的那樣。此外,else的一部分適用於您第一次運行應用程序時。那麼你沒有保存任何用戶默認值,所以savedDatenil,你必須照常創建你的報價。

最後是一個普遍的說法:使用NSCalendar是比較昂貴的(雖然它是爲這個場景設計的),所以你不應該使用它,例如,當在表格中填充單元格時(因爲這可能會對幀產生負面影響)在滾動期間的速率)。在這種情況下,它非常好(相對是此處的關鍵字),我只是想讓你知道,然後才能最終提前將自己的編碼提前到達這個點。 :)日期格式化程序也是如此。

哦,關於註釋:不需要說對不起,我只想讓你知道事情怎麼在這裏SO是和緩衝下降一點,當你看到你的問題得到downvoted。我希望這可以幫助你。

+0

非常感謝!我很感激 ! –

+0

非常歡迎。如果這解決了你的問題,也許接受和/或upvote我的答案。 :)(我認爲你是新的,所以通常你在這裏做什麼,我會很感激的。) – Gero

+0

我試過了,但是我需要15個聲望:( –

相關問題