0

バックグラウンド フェッチを使用してデータ同期プロセスを呼び出す状況があります。同期関数は負荷の高いタスクであるため、バックグラウンド スレッドで実行されます。

ここに私のコードがあります、

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)
    }
}

今、私はいくつかの質問があります:

  1. バックグラウンド フェッチは 30 秒なので、私のタスクが 30 秒で完了しない場合、何が起こるかというと、completeHandler を .NoData または .Failure に設定できないため

  2. 開発者が 30 秒以内に指定しない場合に設定されるデフォルトの completionHandler 値 (.NoData など) はありますか。

  3. これを行うための他の良い方法はありますか。

前もって感謝します

4

1 に答える 1