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 秒的限制(我认为)。虽然响应很大,但目前我只调用一个请求。
  2. 错误的代码.. 嗯.. 在模拟器中完美运行。

ps响应数据比较大的json

所以问题是我错过了什么?以及为什么不调用 SyncServiceDataSource.dbOperations

4

0 回答 0