ストップウォッチアプリケーションを作成していますが、ユーザーがアプリケーションを閉じる前に開始日を保存し、ユーザーがアプリケーションを再度開いたときに取得する必要があります。
そのため、たとえば、ユーザーがストップウォッチを起動してからアプリケーションを閉じ、しばらくしてからアプリケーションを再び開いた場合、ストップウォッチが実行されている場合、アプリは実行時間に開始から終了までの時間を追加する必要があります。
これを処理するビューコントローラーで2つの関数を作成しました。コードは次のとおりです。
override func viewWillAppear(animated: Bool)
{
let startTimedefault:NSUserDefaults = NSUserDefaults.standardUserDefaults()
let startTimesaved:NSDate = startTimedefault.objectForKey("start time") // This line is buggy
if(launchBool == true)
{
timer = NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: "fireStopWatch", userInfo: nil, repeats: true)
startTime = startTimesaved
}
if(launchBool == false)
{
timer.invalidate()
}
}
override func viewWillDisappear(animated: Bool)
{
NSUserDefaults.standardUserDefaults().setObject(launchBool, forKey: "Start/Stop")
NSUserDefaults.standardUserDefaults().setObject(startTime, forKey: "start time")
NSUserDefaults.standardUserDefaults().setObject(elapsedTime, forKey: "elapsed time")
}
ここでStackOverflowの投稿をいくつか確認しました。
日付オブジェクトを次のように設定します。
UserDefaults.standard.set(Date(), forKey:"yourKey")
次を使用して取得します。
UserDefaults.standard.object(forKey: "yourKey") as! Date
Swift 3/4/5Date
の代わりにNSDate
(type alias)を使用:
let yourDate = UserDefaults.standard.object(forKey: "yourKey") as? Date
UserDefaults.standard.set(yourDate, forKey: "yourKey")
UserDefaults
の "yourKey"の下にまだ日付がない場合は、条件付きキャスト演算子as?
を使用して、crashを避けてください。