【发布时间】:2014-08-21 10:33:07
【问题描述】:
我好像遇到了麻烦。出于某种原因,如果我尝试检查 NSURLSessionTask 对象的类类型,它根本不起作用。如果我检查他们的taskDescription 属性,那么如果我在启动任务之前设置它们当然可以。我只想知道为什么下面的代码对我不起作用。感谢您提供的任何帮助!
- (void)uploadIt
{
NSURLSessionConfiguration *defaultConfigObject = [NSURLSessionConfiguration ephemeralSessionConfiguration];
defaultConfigObject.timeoutIntervalForResource = 15.0;
defaultConfigObject.requestCachePolicy = NSURLRequestReloadIgnoringLocalAndRemoteCacheData;
NSURLSession *defaultSession = [NSURLSession sessionWithConfiguration:defaultConfigObject delegate:self delegateQueue:[NSOperationQueue mainQueue]];
[UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
NSURLSessionUploadTask *uploadTask = [defaultSession uploadTaskWithRequest:someRequest fromData:body];
[uploadTask resume];
}
- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error
{
[UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
if (self.uploadResponseData)
{
NSDictionary *d = [NSJSONSerialization JSONObjectWithData:self.uploadResponseData options:kNilOptions error:nil];
NSLog(@"Dict: %@",d);
}
if ([task isKindOfClass:[NSURLSessionDownloadTask class]])
{
// Not called
}
else if ([task isKindOfClass:[NSURLSessionUploadTask class]])
{
// Not called
}
}
- (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveData:(NSData *)data
{
if (!self.uploadResponseData)
{
self.uploadResponseData = [NSMutableData dataWithData:data];
}
else
{
[self.uploadResponseData appendData:data];
}
}
【问题讨论】:
-
对于初学者来说,你的任务是什么样的课程?在上面的代码中,如果它是 NSURLDataTask,那么不调用“未调用”部分将是完全有效的。
-
NSURLSessionDownload和上传任务是NSURLSessionDataTask的子类,但是NSURLSessionDataTask是NSURLSessionTask的子类,所以我不明白为什么这不起作用。 -
我错过了什么吗?我在问你期望的任务是什么类型的,因为如果它是一个 NSURLDataTask,这意味着它既不是 NSURLSessionUploadTask,也不是 NSURLSessionDownloadTask,这可以解释为什么你的代码不起作用。我想这也是你刚才所说的。 NSURLSessionDataTask 作为 NSURLSessionTask 的子类与我的观点没有任何关系,据我所知......
-
那么如何调用isKindOfClass isKindOfClass 两次得到超类呢?
-
我可以再问一次:您要检测的任务是什么类?
标签: ios objective-c nsurlsession nsurlsessiontask nsurlsessionuploadtask