objcio/articles

issue5-4-from-NSURLConnection-to-NSURLSession 's issue.

hayyyyyyden opened this issue · 3 comments

in the paragraph "Download requests take a request as well...." of section Constructors in article issue-5-4 I found something hard to be understood.

  1. it says in the last: "...the completion handler to move the file from its temporary location to a permanent location, which is then the return value of the block: ". But the block here actually has no return value. so the code below will not be compilable.
  2. I also don't get the idea of the code of the block below that is using the [response URL] instead of the return value NSURL * location. isn't the latter to be the actual temp file's URL?

Hm, I see what you mean. Probably the block needs to move the file there.

@mattt, could you have a look at this? If not, I could also update it!

  1. it says in the last: "...the completion handler to move the file from its temporary location to a permanent location, which is then the return value of the block: ". But the block here actually has no return value. so the code below will not be compilable.

Indeed, I had mixed that up with what AFNetworking does for download tasks. The code should be:

NSURLSessionDownloadTask *downloadTask = [session downloadTaskWithRequest:request
                                                         completionHandler:
    ^(NSURL *location, NSURLResponse *response, NSError *error) {
        NSString *documentsPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject];
        NSURL *documentsDirectoryURL = [NSURL fileURLWithPath:documentsPath];
        NSURL *documentURL = [documentsDirectoryURL URLByAppendingPathComponent:[response 
suggestedFilename]];
        [[NSFileManager defaultManager] moveItemAtURL:location
                                                toURL:documentURL
                                                error:nil];
    }];

The updated paragraph should omit ", which is then the return value of the block".

  1. I also don't get the idea of the code of the block below that is using the [response URL] instead of the return value NSURL * location. isn't the latter to be the actual temp file's URL?

location is a temporary file in a temporary directory. The purpose of this completion handler is to move it to its final directory and filename, which should be derived from the suggestedFilename of the response.

o,o,soga