static let serialQueue = dispatch_queue_create("com.wi-mobile.wmForms", DISPATCH_QUEUE_SERIAL)
但是(稱爲Utils.swift一個類的內部),好像我創建一個新的隊列,每次我打電話類似
dispatch_async(UtilsUI.serialQueue)
我需要它在另一個類中,因爲我不能在每次進入ViewController時都實例化一個新的隊列,我需要它運行。
我需要調度一些網絡調用,但我需要在調用第一個UI後立即返回UI,但是我需要所有這些才能連續運行。
編輯:
我使用的回調,或許還有就是我的系列化失敗,這裏有一個例子:
func sendFormToMiddleware() {
successSending = false
errorSending = false
let seconds: String = String(NSDate().timeIntervalSince1970)
let tbvotos: TbvotosDB = TbvotosDB(survey_id: idForm, transaction_id: "\(WMConfiguration.getTranid())", lu_date: seconds , id_movil: WMConfiguration.getUser(), status: "1")
dispatch_async(UtilsUI.serialQueue) {
self.conectionHandler.doPostWmFormsService(self.attemptToSendForm, service: ConnectionHandler.Service.TBVOTOS, parameters: tbvotos.asArray()!)
}
}
func attemptToSendForm(isOk: Bool, mData: [AnyObject], isLastEntity: Bool) -> Void {
if isOk {
successSending = true
Queries.unifyTransactionIDForCurrentFormQuestions(idForm, tranId: WMConfiguration.getTranid())
let responses = Queries.getResponses(idForm)
dispatch_async(UtilsUI.serialQueue) {
self.conectionHandler.insertRespuestas(self.callbackEnvioRespuestas, responses: responses)
}
self.removeAllOverlays()
self.returnAfterSendingForm()
self.view.userInteractionEnabled = true
self.navigationController?.navigationBar.userInteractionEnabled = true
} else {
self.removeAllOverlays()
self.view.userInteractionEnabled = true
self.navigationController?.navigationBar.userInteractionEnabled = true
errorSending = true
UtilsUI.showAlert(NSLocalizedString("Error al contactar con el Servidor", comment: "Fallo conexión middleware"), self)
}
}
這裏doPostWmFormsService的第一個參數(attemptToSendForm)是回調函數。如果我是對的,我無法確定我應該使用其他方法。
爲什麼你認爲你會得到一個新的隊列?如果我把你的代碼行放在一個類中,然後「打印(UtilsUI.serialQueue)」兩次,它會同時顯示相同的地址(因此是同一個對象)。 –
我想我得到一個新的隊列,因爲在看完日誌請求後,它們不會連續運行 – danywarner
打印您從'serialQueue'返回的值是肯定的。有可能(可能嗎?)您的請求被串行調度,但是網絡本身沒有被序列化。也許用你發送的代碼的例子更新你的問題.... –