2016-06-20 9 views
1

Ich habe eine Unterklasse von NSURLProtocol, Die NSURLConnection funktioniert gut.NSURLSession sessionWithConfiguration hat die benutzerdefinierte NSURLProtocol-Methode canInitWithRequest nicht aufgerufen

Und [NSURLSession sharedSession] funktioniert auch gut.

Aber [NSURLSession sessionWithConfiguration: Konfiguration] nicht funktioniert,

ich den Namen [NSURLProtocol register: NSURLProtocolSubclass.class];

Was ist ein Fehler?

NSString * stringUrl = @"https://www.apple.com/"; 
NSURL * url = [NSURL URLWithString:stringUrl]; 
NSMutableURLRequest * urlRequest = [NSMutableURLRequest requestWithURL:url]; 
urlRequest.HTTPMethod = @"GET"; 

NSURLSessionConfiguration * configuration = [NSURLSessionConfiguration ephemeralSessionConfiguration]; 
configuration.timeoutIntervalForResource = 20.0; 

//this can work, but I cann't edit. 
//configuration.protocolClasses = @[NSURLProtocolSubclass.class]; 

//this can work. 
NSURLSession * urlSession = [NSURLSession sharedSession]; 

//this not work. 
//NSURLSession * urlSession = [NSURLSession sessionWithConfiguration:configuration]; 

//Task. 
NSURLSessionDataTask * task = [urlSession dataTaskWithRequest:urlRequest completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) { 
    NSHTTPURLResponse * httpUrlResponse = (NSHTTPURLResponse *)response; 
    NSLog(@"---- session: %ld", (long)httpUrlResponse.statusCode); 
}]; 
[task resume]; 
+0

Erste Frage - warum verwenden Sie eine ephemere Sitzung? Ich frage, weil es sehr wenige Gründe dafür gibt, sie jemals zu benutzen. – ArtSabintsev

+0

Ich versuche die defaultSessionConfiguration, die NSURLProtocolSubclass hat auch nicht aufgerufen. – fyxrhyry

+0

ah, sollte die Frage ausführlicher gelesen haben. Um ehrlich zu sein, ich habe nie mit NSURLProtocol gearbeitet, also glaube ich nicht, dass ich dabei helfen kann. Entschuldigen Sie. Die Verwendung des Protokolls erfordert jedoch nicht die Notwendigkeit einer ephemeren Sitzung. Nach meinem Wissen haben die beiden APIs nicht viel miteinander zu tun. Sie sollten einfach die defaultConfiguration verwenden können. – ArtSabintsev

Antwort

2

Die registerClass Methode registriert ein Protokoll mit NSURLConnection und mit der gemeinsamen Sitzung nur. Andere Sitzungen kopieren den globalen Satz von Protokollen zum Zeitpunkt der Erstellung der Sitzung, IIRC, sofern Sie kein benutzerdefiniertes Array bereitstellen. In diesem Fall wird das Array kopiert.

Ether Weg, wenn Sie Protokolle hinzufügen müssen, während Ihre Anwendung ausgeführt wird, bin ich ziemlich sicher, dass Sie jedes Mal eine neue Sitzung erstellen müssen, wenn Sie die freigegebene Sitzung verwenden.

+0

Vielen Dank für diesen Kommentar. Ich habe mehrere Stunden vergeblich verloren, bis ich das gefunden habe. Vielen Dank. – kandelvijaya

Verwandte Themen