Re: Why does NSURLSession return NSURLResponse instead of NSHTTPURLResponse
Re: Why does NSURLSession return NSURLResponse instead of NSHTTPURLResponse
- Subject: Re: Why does NSURLSession return NSURLResponse instead of NSHTTPURLResponse
- From: じょいすじょん <email@hidden>
- Date: Wed, 18 Oct 2017 14:54:15 +0900
> On Oct 18, 2017, at 14:18, Jens Alfke <email@hidden
> <mailto:email@hidden>> wrote:
>
>
>
>> On Oct 17, 2017, at 5:06 PM, email@hidden
>> <mailto:email@hidden> wrote:
>>
>> Isn’t NSHTTPURLResponse a subclass of NSURLResponse?
>
> Yes it is, but calling `((NSHTTPURLResponse*)response).statusCode` will still
> throw an exception if the response isn’t actually an instance of the
> subclass, because the base class doesn’t implement that property.
>
> —Jens
That's exactly the point I think.
The docs and call signature mostly say you'll get NSURLResponse, but that it
will be NSHTTPURLResponse if your request was HTTP or HTTPS.
Perhaps there is a bug.
Either a docs bug worth filing if it should say you should always check if the
response is an NSHTTPURLResponse or that it responds to selector statusCode
Or a functional bug where sometimes it's not working.
Sample code here shows the completionHandler passing an NSURLResponse not
necessarily a subclass.
https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/URLLoadingSystem/Articles/UsingNSURLSession.html
<https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/URLLoadingSystem/Articles/UsingNSURLSession.html>
The docs for dataTaskWithURL:completionHandler: say
response
An object that provides response metadata, such as HTTP headers and status
code. If you are making an HTTP or HTTPS request, the returned object is
actually an NSHTTPURLResponseobject.
The docs show the signature as this
- (NSURLSessionDataTask
<https://developer.apple.com/documentation/foundation/nsurlsessiondatatask?language=objc>
*)dataTaskWithURL:(NSURL
<https://developer.apple.com/documentation/foundation/nsurl?language=objc>
*)url
completionHandler:(void (^)(NSData
<https://developer.apple.com/documentation/foundation/nsdata?language=objc>
*data, NSURLResponse
<https://developer.apple.com/documentation/foundation/nsurlresponse?language=objc>
*response, NSError
<https://developer.apple.com/documentation/foundation/nserror?language=objc>
*error))completionHandler;
That does indeed seem to imply that it would return an NSURLResponse as a
generality, but that you will in fact have an NSHTTPURLResponse object if your
request was HTTP or HTTPS.
Docs for dataTaskWithRequest:completionHandler: the same in all those key areas.
Docs for downloadTaskWithURL:completionHandler: same.
Docs for downloadTaskWithRequest:completionHandler: same.
Docs for downloadTaskWithResumeData:completionHandler: same.
Docs for uploadTaskWithRequest:fromData:completionHandler: same.
uploadTaskWithRequest:fromFile:completionHandler:
Docs for URLSession:dataTask:didReceiveResponse:completionHandler: get a little
vague but the signature says NSURLResponse.
URLSession:dataTask:didReceiveResponse:completionHandler: also vague.
URLSession:dataTask:willCacheResponse:completionHandler: also vague, but
NSCachedURLResponse seems a bit different.
_______________________________________________
Do not post admin requests to the list. They will be ignored.
Macnetworkprog mailing list (email@hidden)
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden