2016-08-11 8 views
2

私は、サーバーにいくつかのデータを送信したいが、私はしようとしたとき、私は多分、私はそれを正しく使用していないの発送に問題だと思うが、私はXcodeの経験がないこのエラーにSwiftでのdispatch_asyncの使用方法は?

enter image description here

を取得

func updateAndDismiss6() { 
    SharingManager.sharedInstance.FinalDiag = self.Diag.text! 
    SharingManager.sharedInstance.TreatmentDays = self.Trata.text! 
    SharingManager.sharedInstance.SystematicTreat = self.TrataSu.text! 
    SharingManager.sharedInstance.LidoPatch = self.ParcheLido.text! 
} 

@IBAction func IrResumen(sender: AnyObject) { 

    updateAndDismiss6() 

    let prefs = NSUserDefaults.standardUserDefaults() 
    let userid = prefs.stringForKey("userid")! as String 

    let Inicial = SharingManager.sharedInstance.Initials 
    let Edad = SharingManager.sharedInstance.Age 
    let Resultados = SharingManager.sharedInstance.Result 
    let Diagnostico = SharingManager.sharedInstance.FinalDiag 
    let Ttratamiento = SharingManager.sharedInstance.TreatmentDays 
    let TsUsado = SharingManager.sharedInstance.SystematicTreat 
    let Plidocaina = SharingManager.sharedInstance.LidoPatch 




    if (Inicial == "" || Edad == "" || Resultados == "" || Diagnostico == "" || Ttratamiento == "" || TsUsado == "" || Plidocaina == "" || userid == "") { 

     let alertView:UIAlertView = UIAlertView() 
     alertView.title = "No data" 
     alertView.message = "error de datos" 
     alertView.delegate = self 
     alertView.addButtonWithTitle("OK") 
     alertView.show() 
    } 
    else { 



     let url_servicio = "http://arasoftltda.com/grunenthal/app/muestra.php" 

     let request = NSMutableURLRequest(URL: NSURL(string: url_servicio)!) 
     request.HTTPMethod = "POST" 
     //let postString = "nombre=pruebafromios&[email protected]&registro=registro&esp=esp&pais=Colombia&ciudad=Cogua&contrasena=123" 
     let postString = "iniciales=\(Inicial)&edad=\(Edad)&resultado=\(Resultados)&diagnostico=\(Diagnostico)&dias=\(Ttratamiento)&tratamiento=\(TsUsado)&parche=\(Plidocaina)&id=\(userid)" 
     request.HTTPBody = postString.dataUsingEncoding(NSUTF8StringEncoding) 
     let task = NSURLSession.sharedSession().dataTaskWithRequest(request) { data, response, error -> Void in 
      if (error != nil){ 
      print(error!.localizedDescription) 
      } else{ 
       let nsdata:NSData = NSData(data: data!) 

       do{ 
        let json = try NSJSONSerialization.JSONObjectWithData(nsdata, options: NSJSONReadingOptions.MutableContainers) 
        let id = json["id"] as! String 



        if (id != ""){ 
         print (id) 

         dispatch_async(dispatch_get_main_queue()) { 
          [unowned self] in 
          self.performSegueWithIdentifier("Resumen", sender: self)} 
        } 

       } 

       catch{ 
        print("Error del JSON") 
        let alertView:UIAlertView = UIAlertView() 
        alertView.title = "Fallo al enviar datos!" 
        alertView.message = "Error de conexion con el servidor" 
        alertView.delegate = self 
        alertView.addButtonWithTitle("OK") 
        alertView.show() 
       } 
       } 

     } 
     task.resume() 

    } 

    } 
+1

無関係ですが、私はこの文脈で 'unowned self'を使うことを勧めます。 View Controllerが本当に却下される可能性がある場合は、 'weak self'を使用します。しかし、「所有されていない」とすると、あなたに迷惑な参照が残ることがあります。また、私は 'UIAlertView'の使用を勧めません。現在は 'UIAlertController'を使用します。 – Rob

+0

JSONリクエストが失敗した理由については、 'postString'を表示し、それらの変数のどれもがアンラップされる必要のあるオプションではないことを確認してください。 (b)予約されていない文字(句読点、スペースなど)がないこと。 'x-www-form-urlencoded'リクエストを作成するときには、一般的に値をエスケープするだけで安全です。 – Rob

+0

あなたのアドバイスを受けてくれた友人 –

答えて

2

あなたのエラーメッセージがyと語っている:または

ウル時間のために迅速なので、私は任意のヘルプは大歓迎です、うまくログ・エラー・ウィンドウを理解する方法がわからない、thaksこれが私のコードですそれはUI(この場合は自動レイアウト制約)をバックグラウンドスレッドから更新しようとしました。スタックトレースに多数のUIAlertViewUIAlertControllerの参照があると、問題の原因がUIAlertViewであることがわかります。

要は、すべてのUI更新をメインキューにディスパッチする必要があります。したがって、メインキューにperformSegueWithIdentifierをディスパッチすることに加えて、UIAlertView/UIAlertControllerもメインキューにディスパッチする必要があります。

+1

thats right、thanks –

1

segueを実行中に実行しています。アラートを表示しながら同じことをしよう!

関連する問題