URL Session(NSURLSessionDataTask)
URL Session(NSURLSessionDataTask))
URL Session(NSURLSessionUploadTask)
URL Session(NSURLSessionDownloadTask)
URL Session(Cache).md
URL Session(Cookie)
이 블로그에서는 전체 프로젝트에서 가장 중요한 기능인 서버와 통신하는 것을 설명합니다.현재의 앱은 단독으로 조작하는 것이 매우 적고 기본적으로 서버와 통신할 것이라고 믿는다.
1 NSURLSessionDataTask
서버와 통신하는 데 사용된 클래스는 NSURLSessionDataTask입니다. 초기에 우리는 NSURLConnection을 사용하여 통신을 완성했습니다.
NSURLSessionDataTask는 NSURLSession의 하위 클래스로 서버에 데이터를 보내는 동시에 서버가 보낸 데이터를 받아들여 짧은 연결 작업입니다.
2 프로젝트 구축
당신이 어떤 항목을 사용하든 상관없습니다. 이번에는 NSURLSessionDataTask의 관련 기능을 테스트하기 위해서입니다.이를 위해 클래스 YJDataTaskVC를 사용합니다.
//
// YJDataTaskVC.swift
// NSURLSession
//
// CSDN:http://blog.csdn.net/y550918116j
// GitHub:https://github.com/937447974/Blog
//
// Created by yangjun on 15/12/3.
// Copyright © 2015 . All rights reserved.
//
import UIKit
/// NSURLSessionDataTask
class YJDataTaskVC: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
}
}
이것은 매우 깨끗한 종류로 모두가 일목요연하다고 믿는다.너는 너의 프로젝트가 이 VC에 들어갈 수 있다는 것을 보증하기만 하면 된다.
3 비동기식 요청
NSURLSession 전체 시리즈의 요청은 고도로 비동기적이며, 사용자가 요청을 한 후 데이터가 돌아오지 않을 때 다른 조작을 할 수 있습니다.
네트워크 요청 시 일반적으로 3단계로 나뉜다.
3.1 요청 받기
통신에서 get은 가장 간단한 요청 방식입니다. URL 링크 하나로 서버가 보낸 데이터를 얻을 수 있습니다.YJDataTaskVC에 다음 코드를 추가합니다.
// MARK: -
// MARK: Get
func sendRequestGet() {
//
let urlStr = "https://raw.githubusercontent.com/937447974/Swift/master/NSURLSession/NSURLSession/YJDataTaskVC.swift"
if let url = NSURL(string: urlStr) {
//
let request = NSURLRequest(URL: url)
// 1. session , session
let session = NSURLSession.sharedSession()
// 2. NSURLSessionDataTask
let dataTask = session.dataTaskWithRequest(request) { (data: NSData?, response: NSURLResponse?, error: NSError?) -> Void in
//
if data != nil {
self.jsonObjectWithData(data!)
} else {
print(" :\(error?.localizedDescription)")
}
}
dataTask.resume() // 3. http
}
}
// MARK: - data
func jsonObjectWithData(data: NSData) -> [String: AnyObject]? {
var dict: [String: AnyObject]? = nil
do {
// data -> AnyObject
let jsonObject = try NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.AllowFragments)
dict = jsonObject as? [String: AnyObject]
print(" :\(dict)")
} catch {
print(" , :\(error)")
print(" :\(NSString(data: data, encoding: NSUTF8StringEncoding)))")
}
return dict
}
방법sendRequestGet () 에서, 나는 get을 사용하여 github의 현재 클래스의 원본 코드를 가져옵니다.여기서 json Object With Data는 서버에서 보낸 NSData 데이터를 사전으로 변환하기 위한 것입니다.
viewDidLoad()에 코드를 추가합니다.
override func viewDidLoad() {
super.viewDidLoad()
//
self.sendRequestGet()
}
프로젝트를 실행하면 컨트롤러에서 출력 정보를 볼 수 있습니다.
3.2 포스트 요청
네트워크 통신에서 우리가 가장 자주 사용하는 것은post가 데이터를 제출하는 것이다.로그인, 등록, 비밀번호 수정 등 기능은 비동기적인 포스트를 통해 이루어진다.
// MARK: - Post
func sendRequestPost() {
let urlStr = "https://www.baidu.com"
if let url = NSURL(string: urlStr) {
//
let request = NSMutableURLRequest(URL: url)
request.HTTPMethod = "POST" // POST, GET
request.addValue("text/xml", forHTTPHeaderField: "Content-Type")//
//
let dict = ["name": " ", "qq": "937447974"]
do {
try request.HTTPBody = NSJSONSerialization.dataWithJSONObject(dict, options: NSJSONWritingOptions.PrettyPrinted)
print(" :\(NSString(data: request.HTTPBody!, encoding: NSUTF8StringEncoding))")
} catch {
print("json :\(error)")
}
// 1. session , session
let session = NSURLSession.sharedSession()
// 2. NSURLSessionDataTask
let dataTask = session.dataTaskWithRequest(request) { (data: NSData?, response: NSURLResponse?, error: NSError?) -> Void in
//
if data != nil {
self.jsonObjectWithData(data!)
} else {
print(" :\(error?.localizedDescription)")
}
}
dataTask.resume() // 3. http
}
}
post 요청은 get 요청보다 몇 단계 더 많습니다. 더 많은 절차는 우리의 데이터를 NSMutableURLRequest에 봉인하는 것입니다.
4 동기화
NSURLSession에서는 동기화가 이루어지지 않지만 비즈니스 요구 사항으로 인해 사용자의 요청이 동기화되는 경우가 있습니다.여기서 NSURLConnection을 사용하여 동기화 작업을 완료할 수 있습니다.
여기에는 Post의 동기화 요청만 표시됩니다.Get에 대한 자세한 내용은 NSURLSession의 get 요청과 같습니다.
// MARK: - Post
func sendSynchronousRequestPOST() {
let urlStr = "https://www.baidu.com"
if let url = NSURL(string: urlStr) {
//
let request = NSMutableURLRequest(URL: url)
request.HTTPMethod = "POST" // POST, GET
request.addValue("text/xml", forHTTPHeaderField: "Content-Type")//
//
let dict = ["name": " ", "qq": "937447974"]
do {
try request.HTTPBody = NSJSONSerialization.dataWithJSONObject(dict, options: NSJSONWritingOptions.PrettyPrinted)
print(" :\(NSString(data: request.HTTPBody!, encoding: NSUTF8StringEncoding))")
} catch {
print("json :\(error)")
}
//
do {
let data = try NSURLConnection.sendSynchronousRequest(request, returningResponse: nil)
self.jsonObjectWithData(data)
} catch {
print(" :\(error)")
}
}
}
관련 테스트는 스스로 완성할 수 있다.
기타
소스 코드
Swift
참고 자료
URL Session Programming Guide
문서 수정 기록
시간
묘사
2015-12-04
박문 완성
2015-12-12
링크 변경
저작권 소유
CSDN:http://blog.csdn.net/y550918116j
GitHub:https://github.com/937447974/Blog
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
redis-rails의 세션 만료 거동을 확인하고 플레이로컬로 사이트에 액세스하는 것으로 3개월의 기한 첨부 세션 데이터가 생성되는 설정을 하고 있다. redis 시작 command DB1 선택(설정에 따라 다름) redis-commands 사이트에 접속, 키 일람을 취...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.