2015-07-06 4 views
0
func postToServerAction() -> String{ 
    var stat = "" 

    var url: NSURL = NSURL(string: /*External LinK */)! 

    var request:NSMutableURLRequest = NSMutableURLRequest(URL:url) 

    var bodyData = "Username=" + userTxt.text + "&Password=" + passwordTxt.text 

    //var bodyData = "Username=" + userTxt.text 
    request.HTTPMethod = "POST" 
    request.HTTPBody = bodyData.dataUsingEncoding(NSUTF8StringEncoding); 

    NSURLConnection.sendAsynchronousRequest(request, queue: NSOperationQueue.mainQueue()) 

     { 
      (response, data, error) in 

      var reciveData = NSString(data:data,encoding: NSUTF8StringEncoding) 

      if(reciveData == "false") 
      { 
       stat = "YES" 
      }else{ 
       stat = "NO" 
      } 
     } 


    return stat 



} 

Вот некоторые кодВозвращение значения из NSURLConnect.SendAsyncronousRequest

Я хотел бы вернуться к моей переменной, но там нет значения внутри. может быть проблема с NSURLConnection.sendAsynchronousRequest (request, queue: NSOperationQueue.mainQueue()) может кто-нибудь сказать мне, как я могу управлять этим func. Я хотел бы, чтобы вернуть значение из NSURLConnection.sendAsynchronousRequest

в моем случае там нет возвращаемого значения и моей переменной «reviceData» даст мне правильное значение, но я до сих пор не могу присвоить его любой переменной

Я новичок для быстрых и нехороших на английском языке извините за грамматику.

+0

Рассмотрите возможность использования dispatch_group – Sandeep

+0

stat не возвращается, потому что его ноль в то время, когда вы это делаете. Вы отправили асинхронную рассылку. Вам нужно вернуть значение, когда его полный – Aggressor

+0

@Aggressor вы могли бы мне показать. Как это сделать –

ответ

0

Вы вызываете задачу async, но похоже, что вы считаете ее не асинхронной. Вы возвращаете stat в блок кода асинхронного кода, но вы, кажется, думаете, что его выполнили до того, как вы нажмете статут возврата, это не так, и вы должны прочитать, как работает потоки. Когда вы возвращаете stat, stat еще не существует, потому что он был передан другому потоку, на который потребуется неизвестное время. Поэтому вам необходимо передать обратный вызов, если существует stat, который находится внутри вашей задачи async. См. Ниже, как я отредактировал ваш код (callbackToFire необходимо создать и передать вам).

func postToServerAction(callbackToFire:(String)->Void) -> Void{ 
     var stat = "" 

     var url: NSURL = NSURL(string: /*External LinK */)! 

     var request:NSMutableURLRequest = NSMutableURLRequest(URL:url) 

     var bodyData = "Username=" + userTxt.text + "&Password=" + passwordTxt.text 

     //var bodyData = "Username=" + userTxt.text 
     request.HTTPMethod = "POST" 
     request.HTTPBody = bodyData.dataUsingEncoding(NSUTF8StringEncoding); 

     NSURLConnection.sendAsynchronousRequest(request, queue: NSOperationQueue.mainQueue()) 

      { 
       (response, data, error) in 

       var reciveData = NSString(data:data,encoding: NSUTF8StringEncoding) 

       if(reciveData == "false") 
       { 
        stat = "YES" 
       }else{ 
        stat = "NO" 
       } 

       callbackToFire(stat) 
      } 
    } 
+0

Можете ли вы показать мне пример кода callbackToFire, пожалуйста? –

+0

Это отдельный вопрос и очень хорошо доступен для простого поиска. Ищите быстрые обратные вызовы. – Aggressor

+0

Я уже знаю, как использовать функцию обратных вызовов, но я не знаю, что кодировать в fuction в этой ситуации –

Смежные вопросы