Допустим, вы используете 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 }.
Что означает «две ошибки в фигурных скобках» в документации?
Означает ли это, что может произойти любое из этих событий?
Я понятия не имею, как можно было бы определить ответ здесь наверняка, это недокументировано.