Múltiples llamadas a una request de Alamofire, obtenga reference para cada llamada.

He utilizado Alamofire para cargar imágenes en datos de forma multiparte. Tengo éxito en lograr mi objective. Cada vez que subo una image, llamo a la function "uploadDocWebService". Entonces, la cantidad de veces que se llama a la function es igual a la cantidad de imágenes. No puedo identificar el resultado de cada llamada. Mis imágenes se cargan con éxito. En caso de que se produzca un error en el server, o una falla en la connection a Internet, la carga fallará, no puedo identificar qué image debo borrar de la vista, que falló. Paso indexPath como un parámetro para cada carga de imágenes. Pero indexpath se actualiza a la última carga de imágenes antes de recibir el resultado para la primera carga de imágenes. ¿Puede alguien sugerirme un mejor enfoque para esta situación?

Aquí está el código que uso para upload imágenes:

func uploadDocWebservice(fileUrl: NSURL , progressView : PWProgressView , index : String , imageData : NSData? , name : String , mimeType : String , uploadType : String){ let url = "\(kBaseURL)\(uploadDocsUrl)" var type = String() var networkGroupId = String(SingletonClass.shanetworkingInstance.selectedNetworkId!) if SingletonClass.shanetworkingInstance.groupPopUp == true { type = "group" networkGroupId = String(SingletonClass.shanetworkingInstance.selectedSubNetworkOrGroup!) }else { type = "network" } Alamofire.upload( .POST, url, multipartFormData: { multipartFormData in if uploadType == "Image" { multipartFormData.appendBodyPart( data: imageData! , name: "file", fileName: name, mimeType: mimeType) }else { multipartFormData.appendBodyPart(fileURL: fileUrl, name: "file") } multipartFormData.appendBodyPart(data:"\(SingletonClass.shanetworkingInstance.tokenId)".dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)!, name :"token") multipartFormData.appendBodyPart(data:"\(type)".dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)!, name :"networkGroup") multipartFormData.appendBodyPart(data:"\(networkGroupId)".dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)!, name :"networkGroupId") }, encodingCompletion: { encodingResult in switch encodingResult { case .Success(let upload, _, _): upload.progress { bytesRead, totalBytesRead, totalBytesExpectedToRead in let ratio: Float = Float(totalBytesRead) / Float(totalBytesExpectedToRead) // Call main thread. dispatch_async(dispatch_get_main_queue(), { progressView.progress = ratio }) } upload.responseJSON { response in let dataString = NSString(data: response.data!, encoding:NSUTF8StringEncoding) print(dataString) self.edited = true do{ let json = try NSJSONSerialization.JSONObjectWithData(response.data!, options: .MutableLeaves) as? NSDictionary if let success = json!["success"] as? Int { if success == 1 { let id = json!["response"]!.objectForKey("id") as! String let docName = "\(json!["response"]!.objectForKey("name") as! String).\(json!["response"]!.objectForKey("ext") as! String)" let dic = ["name" : docName , "Id" : id] self.uploadedDocsIdArray.addObject(dic) self.uploadedArrayJustNames.addObject(docName) print(self.uploadedDocsIdArray) }else { // delete image from view here } } }catch{ // delete image from view here invokeAlertMethod("Error", msgBody: "Invalid Json", delegate: self) } } case .Failure(let encodingError): print(encodingError) } } ) } 

Si conozco qué resultado está asociado a qué llamada, eso podría ayudarme a borrar esa image particular de la vista.

Debe mantener una reference a la request original, debería ser la misma para las requestes de carga que creo. Prueba lo siguiente:

 func uploadDocWebservice(fileUrl: NSURL , progressView : PWProgressView , index : String , imageData : NSData? , name : String , mimeType : String , uploadType : String) -> Request? { return Alamofire.upload ... } 

Entonces, simplemente puede tener un set de requestes, por ejemplo: var requests: [Request]() . Cuando llame a Alamofire.upload / Alamofire .request – devuelve un object Request.

A continuación, puede hacer lo siguiente:

 var requests: [Request]() let request = uploadDocWebservice(...) requests.append(request) 

Luego, puede recorrer la matriz y verificar la request que desee.