2017-05-30 17 views
0

iOSシステムのアプリ時計で、タイマーまたはストップウォッチを開始したときにアプリを終了し、終了してから、タイマーまたはストップウォッチを実行しています。バックグラウンドでタイマーを実行する

timerをバックグラウンドで実行するにはどうすればよいですか?
アップルはどうしましたか?

+0

アプリが再び実行されるときにタイマーを再起動する必要があります。 – rmaddy

+0

ストップウオッチまたはタイマーが消えた時間を保存し、アプリを再び開くときに新しい値を設定するために「バックグラウンドで」過ごした時間を計算します。 – LinusGeffarth

+0

彼らはどこかに書かれた 'time_start'(' NSUserDefaults'のような)を必要とし、再起動後も単に続けることができます。 –

答えて

1

それが可能だ。ここでは

は、アプリケーションを閉じたとき、あなたがそれを設定する方法です。このよう
:ここvar bgTask = UIBackgroundTaskIdentifier()

は、それを使用する方法である:

var bgTask = UIBackgroundTaskIdentifier() 
    bgTask = UIApplication.shared.beginBackgroundTask(expirationHandler: { 
     UIApplication.shared.endBackgroundTask(bgTask) 
    }) 
    let timer = Timer.scheduledTimer(timeInterval: 10, target: self, selector: #selector(notificationReceived), userInfo: nil, repeats: true) 
    RunLoop.current.add(timer, forMode: RunLoopMode.defaultRunLoopMode) 

私はそれが有用であろう願っています!

-1

アプリケーションを閉じると、現在のタイマーと時計の値を長い属性の中に秒またはミリ秒で格納します。私は共有できる一般的なものを使用します:

static let userDefaults = UserDefaults.standard 

    public static func set<T: Hashable> (withValue value: T, andKey key: String) { 
     userDefaults.set(value, forKey: key) 
     userDefaults.synchronize() 
    } 
    public static func get(forKey key: String) -> Any? { 
     if((userDefaults.object(forKey: key)) != nil){ 
      let data = userDefaults.object(forKey: key) as? Any 
      return data 
     } 
     return nil 
    } 

もう一度アプリケーションを起動するときは、getメソッドを使用します。秒と保存された時間を言うことができます。その後、現在の時刻と保存されている時刻を比較し、その間の秒数を計算して、保存された秒数に時間差を加えれば、タイマーを提示された値に設定してそのまま使用できます。バックグラウンドで実行するための要求を識別トークンによって

NotificationCenter.default.addObserver(self, selector: #selector(storeTime), name: NSNotification.Name.UIApplicationWillResignActive, object: nil) 

func storeTime() { 
    "UserDefaultClassName".set(withValue: "preferably dictionary", andKey: String) 
} 
関連する問題