What is the best approach to keep the download working?
I need to upload images to the server and make sure the upload works. If for some reason the download does not work, I will have to try again later.
I am currently using NSUrlSession to upload an image:
- (void)didCreateSignature:(UIImage *)image {
BLog();
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *imageFile = [NSString stringWithFormat:@"%@/%@", documentsDirectory,@"test.png"];
NSData *imageData = UIImagePNGRepresentation(image);
[imageData writeToFile:imageFile atomically:YES];
while (![[NSFileManager defaultManager] fileExistsAtPath:imageFile]) {
[NSThread sleepForTimeInterval:.5];
}
NSURLSession *session = [self backgroundSession];
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:self.uploadUrl]];
[request setHTTPMethod:@"POST"];
[request addValue:@"image/png" forHTTPHeaderField:@"Content-Type"];
NSURLSessionUploadTask *uploadTask = [session uploadTaskWithRequest:request fromFile:[NSURL fileURLWithPath:signatureFile]];
[uploadTask resume];
}
Now suppose that the user does not have an Internet connection, then the delegate will be launched:
- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error
{
BLog();
if (error == nil)
{
NSLog(@"Task: %@ completed successfully", task);
}
else
{
NSLog(@"Task: %@ completed with error: %@", [task originalRequest], [error localizedDescription]);
dispatch_async(dispatch_get_main_queue(), ^{
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reachabilityChanged:) name:kReachabilityChangedNotification object:nil];
self.internetReachability = [Reachability reachabilityForInternetConnection];
[self.internetReachability startNotifier];
});
}
}
According to Apple's documentation, you should try again later if the Reachability status has changed. So I was thinking of adding these tasks to Array and starting each task again after the Internet connection became available.
Is this the right approach?
, ( TaskManager). , ?