Cha*_*rrs 0 objective-c ios nsurlsession
我试图从API下载一些JSON.现在什么都没打印出来.
我肯定知道路径和API Key/Value是有效的,因为我使用NSURLSessionDataTask和完成处理程序来完成它,但我想学习如何使用委托方法做同样的事情.
但我似乎无法弄清楚为什么我的委托方法没有被调用.
@interface MetaData () <NSURLSessionDelegate, NSURLSessionDataDelegate>
@end
@implementation MetaData
-(void)downloadData
{
NSURLSessionConfiguration *sessionConfig = [NSURLSessionConfiguration defaultSessionConfiguration];
[sessionConfig setHTTPAdditionalHeaders:@{ header : key}];
NSURLSession *defaultSesh = [NSURLSession sessionWithConfiguration:sessionConfig];
NSURLSessionDataTask *dataTask = [defaultSesh dataTaskWithURL:[NSURL URLWithString:path]];
defaultSesh = [NSURLSession sessionWithConfiguration:sessionConfig delegate:self delegateQueue:nil];
[dataTask resume];
}
- (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveResponse:(NSURLResponse *)response completionHandler:(void (^)(NSURLSessionResponseDisposition disposition))completionHandler
{
NSLog(@"here 2");
}
- (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveData:(NSData *)data
{
NSLog(@"here");
_weaponDictionary = [NSJSONSerialization JSONObjectWithData:data
options:kNilOptions
error:nil];
NSLog(@"dictionary: %@", _weaponDictionary);
}
Run Code Online (Sandbox Code Playgroud)
谢谢您的帮助.
编辑
defaultSesh = [NSURLSession sessionWithConfiguration:sessionConfig delegate:self delegateQueue:nil];
Run Code Online (Sandbox Code Playgroud)
通过添加该行,我将委托设置为self.所以现在我打印"这里2"但仍然不打印字典...
使用该方法
+ (NSURLSession *)sessionWithConfiguration:(NSURLSessionConfiguration *)configuration
delegate:(id<NSURLSessionDelegate>)delegate
delegateQueue:(NSOperationQueue *)queue
Run Code Online (Sandbox Code Playgroud)
正确设置委托.
更新:
你必须调用完成处理程序 didReceiveResponse
completionHandler
代码调用的完成处理程序,用于继续传输,传递常量以指示传输是继续作为数据任务还是应该成为下载任务.
•如果通过NSURLSessionResponseAllow,任务将继续正常进行.
•如果通过NSURLSessionResponseCancel,则任务将被取消.
•如果NSURLSessionResponseBecomeDownload作为处置传递,URLSession:dataTask:didBecomeDownloadTask:则调用委托的方法为您提供取代当前任务的新下载任务.
例如
- (void) URLSession:(NSURLSession *)session
dataTask:(NSURLSessionDataTask *)dataTask
didReceiveResponse:(NSURLResponse *)response
completionHandler:(void (^)(NSURLSessionResponseDisposition))completionHandler
{
completionHandler(NSURLSessionResponseAllow);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4392 次 |
| 最近记录: |