【发布时间】:2014-08-01 12:00:36
【问题描述】:
假设你正在使用 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 }.
文档中的“大括号中的两个错误”是什么意思?
这是否意味着任何一个都可能发生?
我不知道如何确定这里的答案,它没有记录。
【问题讨论】:
-
投反对票的人真是愚蠢至极。这个网站上的反对票变得荒谬了。如果一个问题是高度技术性的,人们就会投反对票,因为他们无法正确阅读并且不理解它。真是荒谬!
-
投了赞成票,因为那些无缘无故投反对票的人惹恼了我,可能不喜欢你丰富多彩的语言。
-
谢谢瑞恩 - 新年快乐 :)
标签: ios objective-c nsurlsession nserror