1

よし、バックグラウンド フェッチの実装に成功しました。そこに問題はありません。私が抱えている問題は、バックグラウンド フェッチがシミュレータとデバイスで異なる動作をすることです。

class func doInBackground(completion: () -> Void) {

    let time = NSDate()
    print(time)

    serverPostRequest()
    completion()
}

class func serverPostRequest() {
    if(loopCount < 1) {
        let params = self.formEncodingBuilder()!
        let syncUrl: String = Constants.BASE_SERVER_URL + Constants.SYNC_URL
        do {
            let opt = try HTTP.POST(syncUrl, parameters: params)
            opt.start { response in
                if let err = response.error {
                    print("error: \(err.localizedDescription)")
                    //also notify app of failure as needed
                    SYNC_STATE = 1
                    SYNCING = false
                }else{
                    let json = JSON(data: response.data)
                    if let success = json["synced"].bool {//synced, all done nothing to do anymore
                        SYNC_STATE = 2
                        SYNCING = false
                    }else {//process data
                        SyncServiceDataSource.dBOperations(json["data"])
                        print("after")
                        serverPostRequest()
                    }
                }
            }
        } catch let error {
            print("got an error creating the request: \(error)")
        }
    }else {
        print("Logical error state, check server logs")
        SYNC_STATE = 1
        SYNCING = false
    }

    loopCount++
}


class SyncServiceDataSource : DataSourceProtocol {

static func dBOperations(data: JSON) {
    print("count")
    print(data.count)
}

}

これで、バックグラウンド フェッチの出力が良好になりました。

2016-04-20 18:47:12 +0000 論理エラー状態の後に 19 カウント、サーバー ログを確認

しかし、iPhone 5(実際の)デバイスで同じことを実行すると、

2016-04-20 18:47:12 +0000

後に何もない

2016-04-20 18:49:12 +0000

以降

SyncServiceDataSource.dBOperations(json["data"])

デバッガーを使用して実行または中断する

  1. バックグラウンド フェッチ 30 秒の制限にはなりません (と思います)。レスポンスは非常に大きいですが、現在私が呼び出しているリクエストは 1 つだけです。
  2. 間違ったコード..うーん..シミュレーターで完全に動作します。

ps応答データは比較的大きいjsonです

だから問題は私が欠けているものですか?SyncServiceDataSource.dBOperations が呼び出されないのはなぜですか

4

0 に答える 0