Да кажем, че използвате NSURLSession dataTaskWithURL: ...
self.currentConnection =
[sess dataTaskWithURL:goUrl
completionHandler:^(NSData *data, NSURLResponse *response, NSError *error)
{
[self.results addObjectsFromArray: [self yourDataConversionCode:data] ];
dispatch_async(dispatch_get_main_queue(), ^{ if (after) after(); );
}];
разбира се, ако може да се наложи да го отмените. (Да кажем, че потребителят е променил дума за търсене или подобен проблем.) Това е лесно с...
-(void)cancelAnyCurrentBooksearch
{
[self.currentConnection cancel];
self.currentConnection = nil;
}
Въпреки това, глупаво той все още извиква блока за завършване, което е много досадно.
Сега, ето "документацията" за анулиране:
/* -cancel returns immediately, but marks a task as being canceled.
* The task will signal -URLSession:task:didCompleteWithError: with an
* error value of { NSURLErrorDomain, NSURLErrorCancelled }.
*/
- (void)cancel;
Ето го проблема...
Какво по дяволите означава това:
стойност за грешка на { NSURLErrorDomain, NSURLErrorCancelled }
Можете ли да имате ДВЕ стойности в NSError??
Ако е така, как да проверя дали NSError е точно това:
" { NSURLErrorDomain, NSURLErrorCancelled } "
каквото и да означава това?
Имайте предвид, че ако направите това:
self.currentConnection =
[sess dataTaskWithURL:goUrl
completionHandler:^(NSData *data, NSURLResponse *response, NSError *error)
{
if( [error code] == NSURLErrorCancelled )
{
NSLog(@" seemed to be CANCELLED programmatically?");
return;
}
[self.results addObjectsFromArray: [self yourDataConversionCode:data] ];
dispatch_async(dispatch_get_main_queue(), ^{ if (after) after(); );
}];
Това наистина "изглежда работи" - но е трудно да се знае, разбира се.
И така, как да проверя за това??
* The task will signal -URLSession:task:didCompleteWithError: with an
* error value of { NSURLErrorDomain, NSURLErrorCancelled }.
Какво означава "две грешки във фигурни скоби" в документацията?
Означава ли, че някое от тях може да се случи?
Нямам представа как човек може да определи отговора тук със сигурност, той е недокументиран.