HTTP通信で処理がバックグラウンドに移行してしまう為、データを正しく取得できないのを改善したい。代替案でも?
下記の関数は、バックグラウンド処理の関係で、動作順序が変わってしまい、関数の返り値が、予定したものにならない。
let task = NSURLSession.sharedSession().dataTaskWithRequest.....
この行以降が飛ばされ、関数が終了する。
改善方法を教えていただけないでしょうか?
Postを利用するため、この方法になっています。代替案でもいいです。
コードが古すぎていたので、HTTPアドレス以外、正しく動くように修正いたしました。
下記の場合、printの出力順が、"NG"->HTMLコードとなる。正しくはHTMLコード->"OK"となってほしい。
よろしく、お願いいたします。
import UIKit
class ViewController: UIViewController ,NSURLSessionDelegate, NSURLSessionDataDelegate {
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
print(Test())
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
func Test()-> String{
let post = "name=Masuda&addr=Tokyo"
let postdata = post.dataUsingEncoding(NSShiftJISStringEncoding)!
let url = NSURL(string: "http://moonmile.net/ios9/post.php")
let req = NSMutableURLRequest(URL: url!)
req.HTTPMethod = "POST"
req.setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type")
let length = postdata.length
req.setValue("\(length)", forHTTPHeaderField: "Content-Length")
req.HTTPBody = postdata
var textBuf : String = "NG"
let task = NSURLSession.sharedSession().dataTaskWithRequest(req, completionHandler: {
( data, res, err ) in
if data != nil {
let text = NSString(data: data!, encoding: NSShiftJISStringEncoding)
print(NSString(data: data!, encoding: NSShiftJISStringEncoding))
dispatch_async(dispatch_get_main_queue(), {
textBuf = "OK"
})
}
})
task.resume()
return textBuf
}
}