gpt4 book ai didi

ios - NSURLSession 委托(delegate)与 completionHandler

转载 作者:IT王子 更新时间:2023-10-29 08:08:12 25 4
gpt4 key购买 nike

我一直使用完成处理程序。使用 NSURLConnection,现在使用 NSURLSession。这导致我的代码非常困惑,尤其是我在请求中请求中请求。

我想尝试在 NSURLSession 中使用委托(delegate)来实现我在 NSURLConnection 中随意完成的事情。

所以我创建了一个NSURLSession,并创建了一个dataTask:

NSURLSessionDataTask *dataTask = [overallSession dataTaskWithURL:url
completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
if(error == nil)
{
NSString * text = [[NSString alloc] initWithData: data encoding: NSUTF8StringEncoding];
NSLog(@"Data = %@",text);
}

}];

[dataTask resume];

现在我有一个用于响应的 completionHandler,我该如何切换到委托(delegate)来管理响应和数据?我可以从这个委托(delegate)中添加另一个 dataTask 吗?使用此 dataTask 创建并放入 session 中的 cookie?

最佳答案

如果你想添加一个自定义委托(delegate)类,你需要至少实现 NSURLSessionDataDelegateNSURLSessionTaskDelegate 协议(protocol)。

使用方法:

NSURLSessionDataDelegate - 获取请求的连续状态

 - (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveResponse:(NSURLResponse *)response
completionHandler:(void (^)(NSURLSessionResponseDisposition disposition))completionHandler {

receivedData=nil; receivedData=[[NSMutableData alloc] init];
[receivedData setLength:0];

completionHandler(NSURLSessionResponseAllow);
}

NSURLSessionDataDelegate

-(void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask
didReceiveData:(NSData *)data {

[receivedData appendData:data];
}

NSURLSessionTaskDelegate

 - (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task
didCompleteWithError:(NSError *)error {
if (error) {
// Handle error
}
else {
NSDictionary* response=(NSDictionary*)[NSJSONSerialization JSONObjectWithData:receivedData options:kNilOptions error:&tempError];
// perform operations for the NSDictionary response
}

如果你想将委托(delegate)代码(中间层)与你的调用类分开(通常最好的做法是为网络调用使用单独的类/层),NSURLSession 的委托(delegate)必须是:-

NSURLSession *session=[NSURLSession sessionWithConfiguration:sessionConfig delegate:myCustomDelegateClass delegateQueue:nil];

引用链接:

  1. NSURLSession Class Reference
  2. iOS NSURLSession Example (HTTP GET, POST, Background Downlads )
  3. From NSURLConnection to NSURLSession

关于ios - NSURLSession 委托(delegate)与 completionHandler,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22653182/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com