バックグラウンド フェッチを使用してデータ同期プロセスを呼び出す状況があります。同期関数は負荷の高いタスクであるため、バックグラウンド スレッドで実行されます。
ここに私のコードがあります、
func application(application: UIApplication, performFetchWithCompletionHandler completionHandler: (UIBackgroundFetchResult) -> Void) {
print("Background Fetch")
Utilities.syncCompleted = false // declared as :> static var syncCompleted:Bool = false
BackgroundSync().startSync() // heavy background task, and iam updating [Utilities.syncCompleted = true) on thread completion
while Utilities.syncCompleted == false {
NSThread.sleepForTimeInterval(1) // sleep for sometime
}
if Utilities.syncCompleted{
completionHandler(UIBackgroundFetchResult.NewData)
}else {
completionHandler(UIBackgroundFetchResult.NoData)
}
}
今、私はいくつかの質問があります:
バックグラウンド フェッチは 30 秒なので、私のタスクが 30 秒で完了しない場合、何が起こるかというと、completeHandler を .NoData または .Failure に設定できないため
開発者が 30 秒以内に指定しない場合に設定されるデフォルトの completionHandler 値 (.NoData など) はありますか。
これを行うための他の良い方法はありますか。
前もって感謝します