NSURLConnection ile özel bir NSURLProtocol uygulayan bu eğiticiyi uygulamaya çalışıyorum. beklendiği gibiNSURLSession ile Özel NSURLProtocol
https://www.raywenderlich.com/76735/using-nsurlprotocol-swift
O, ama şimdi NSURLConnection iOS9 önerilmiyor, ben NSURLSession dönüştürmek çalışıyorum çalışır.
Talihsizce işe yaramadı.
uiwebview'de bir web sitesi yüklüyorum, eğer NSURLConnection kullanırsam yükler yükler ve her şey beklendiği gibi çalışırsa, web görünümünün tüm http istekleri yakalanır, ancak NSURLSession kullanıldığında değil.
Herhangi bir yardım için teşekkür ederiz.
burada kendi koduyla yaşıyorsanız sorun size veri görevi içerecek şekilde NSURLSession.sharedSession kullanıyor olmasıdır kodum
import UIKit
class MyProtocol: NSURLProtocol, NSURLSessionDataDelegate, NSURLSessionTaskDelegate, NSURLSessionDelegate {
//var connection: NSURLConnection!
var mutableData: NSMutableData!
var response: NSURLResponse!
var dataSession: NSURLSessionDataTask!
override class func canInitWithRequest(request: NSURLRequest) -> Bool {
if NSURLProtocol.propertyForKey("MyURLProtocolHandledKey", inRequest: request) != nil {
return false
}
return true
}
override class func canonicalRequestForRequest(request: NSURLRequest) -> NSURLRequest {
return request
}
override class func requestIsCacheEquivalent(aRequest: NSURLRequest,
toRequest bRequest: NSURLRequest) -> Bool {
return super.requestIsCacheEquivalent(aRequest, toRequest:bRequest)
}
override func startLoading() {
let newRequest = self.request.mutableCopy() as! NSMutableURLRequest
NSURLProtocol.setProperty(true, forKey: "MyURLProtocolHandledKey", inRequest: newRequest)
self.dataSession = NSURLSession.sharedSession().dataTaskWithRequest(newRequest)
dataSession.resume()
self.mutableData = NSMutableData()
}
override func stopLoading() {
print("Data task stop")
self.dataSession.cancel()
self.mutableData = nil
}
func URLSession(session: NSURLSession, dataTask: NSURLSessionDataTask, didReceiveResponse response: NSURLResponse, completionHandler: (NSURLSessionResponseDisposition) -> Void) {
self.response = response
self.mutableData = NSMutableData()
print(mutableData)
}
func URLSession(session: NSURLSession, dataTask: NSURLSessionDataTask, didReceiveData data: NSData) {
self.client?.URLProtocol(self, didLoadData: data)
self.mutableData.appendData(data)
}
func URLSession(session: NSURLSession, task: NSURLSessionTask, didCompleteWithError error: NSError?) {
if (error == nil)
{
self.client!.URLProtocolDidFinishLoading(self)
self.saveCachedResponse()
}
else
{
self.client?.URLProtocol(self, didFailWithError: error!)
}
}
func saveCachedResponse() {
let timeStamp = NSDate()
let urlString = self.request.URL?.absoluteString
let dataString = NSString(data: self.mutableData, encoding: NSUTF8StringEncoding) as NSString?
print("TiemStamp:\(timeStamp)\nURL: \(urlString)\n\nDATA:\(dataString)\n\n")
}
}
nasıl kod çalışmıyor biliyoruz? Sorunu kendin bulmak için ne yaptın? Kod örneğinizden geri dönüp yorumlanmış tüm bölümleri kaldırabilir misiniz? Her rutinde ne yapmaya çalıştığınız hakkında bazı yorumlar ekleyebilirsiniz. –
Hey, web görüntüleme önbellekleme ile hızlı ve karşılaşılan sorun konusunda yeniyim. Aynı kaynak ile çalışıyorum, web sayfası düzgün yükleyin ve önbelleğe kaydedin. Ancak cihaz çevrimdışı olduğunda önbellek verisinden alamıyorum. Kodu urlsession ile güncellemeliyim. Lütfen bu kaynak ile bana yardımcı olabilir misiniz :(https://drive.google.com/file/d/0B-5GPXUpPZh-Q2FOWEJudXRaQkE/view?usp=sharing –