Я написал некоторое время назад код, который регистрируется на веб-сайте с учетными данными, введенными пользователем, а затем переходит на определенную страницу для анализа информации там (используя NSURLConnectionDelegate
).Быстрое/iOS8 Последовательные HTTP-запросы
func startConnection() {
var url = NSURL(string:"https://www.website.com/psp/ps/?cmd=login&languageCd=ENG")
var request = NSMutableURLRequest(URL: url!)
request.HTTPMethod = "POST"
let data = (dataString as NSString).dataUsingEncoding(NSUTF8StringEncoding)
request.HTTPBody = data
request.setValue("\(data!.length)", forHTTPHeaderField: "Content-Length")
request.setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type")
request.setValue("text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8", forHTTPHeaderField: "Accept")
connection1 = NSURLConnection(request: request, delegate: self, startImmediately: false)!
connection1.start()
}
func connectionDidFinishLoading(connection: NSURLConnection) {
if (connection == connection1) {
let url = NSURL(string: "https://www.nexturl.com")
var request = NSMutableURLRequest(URL: url!)
connection2 = NSURLConnection(request: request, delegate: self, startImmediately: false)!
connection2.start()
}
if (connection == connection2) {
let url = NSURL(string: "https://www.nexturl.com")
var request = NSMutableURLRequest(URL: url!)
connection3 = NSURLConnection(request: request, delegate: self, startImmediately: false)!
connection3.start()
}
if (connection == connection3) {
let strData: NSString = NSString(data: responseData, encoding: NSUTF8StringEncoding)!
parse(strData)
}
}
Основная идея заключается в выпалить первоначальный запрос, а затем отправлять другие запросы от метода делегата connectionDidFinishLoading
. Есть ли более чистый/лучший способ сделать такой последовательный вызов?
Используйте рамки, такие как AFNetworking, отделяющую запрос HTTP логики от логики приложения, что дает вам простой блок обратного вызова, когда запрос заканчивается , Затем вы можете связывать запросы, выдавая новые запросы во вложенных блоках завершения. –
Да, как сказал Дэвид, лучший способ - использовать основанную на закрытии инфраструктуру HTTP. AS в быстрой, функции закрытия, цепь будет очень чистой. Делегат окончательно не является решением в этом случае. Почему вы хотите последовательный вызов? Вам нужно повторно использовать данные с первого запроса на второй? Если нет, вы можете просто выполнить параллели Запросы? – LastMove
ну, мне действительно нужно аутентифицировать логин. Я смотрю в alamofire, новое соединение. спасибо за ответы. – chris