###前提・実現したいこと
Swift3 、Macアプリケーション(Foundation)
Macのディスプレイスリープ中に処理を継続したい
###発生している問題・エラーメッセージ
NSConditionを用いて同期通信で一定時間ごとにデータを受け取り続ける(メモリに貯めるだけ)プログラムを書いたのですが、Macのディスプレイ(本体ではない)がスリープになると(再度ユーザー認証が必要な状態になると)処理が止まっているようです。以前非同期(NSConditionを使わない)で書いた同様のプログラムではこの問題は発生していなかったので、NSConditionが関係あるかと思っています。
###該当のソースコード
//ボタンを押すとこのコードが実行される(抜粋) func doURLSession(request:URLRequest) -> Any{ var output:Any = 0 let condition = NSCondition() let task = URLSession.shared.dataTask(with: request) { data, response, error in condition.lock() if let data = data{ do { output = try JSONSerialization.jsonObject(with: data, options: JSONSerialization.ReadingOptions.allowFragments) } catch { output = "URLSession failed" } } else { } condition.signal() condition.unlock() } condition.lock() task.resume() condition.wait() condition.unlock() return output } func 一連の動き(){ let 受け取ったデータ = doURLSession(request:リクエスト) print(受け取ったデータ) } var timer = Timer() func doTimer(){ self.timer = Timer.scheduledTimer(timeInterval: TimeInterval(タイマー間隔), target: self, selector: #selector(一連の動き), userInfo: nil, repeats: true) } doTimer()
###試したこと
NSConditionを用いない場合はうまくいくようです。
###補足情報(言語/FW/ツール等のバージョンなど)
Swift3/Cocoa macOS Sierra 10.12.6 iMac Mid 2011