在请求中添加用户信息

时间:2014-11-13 12:10:06

标签: ios objective-c asihttprequest nsurlsession

由于不推荐ASIHTTPRequest,我正在迁移我的代码以使用基于NSURLSession的服务器通信。目前,我使用NSDictionary的{​​{1}} " userInfo" 属性来发送其他用户信息。 ASIHTTPRequest文档中" userInfo" 的说明是"与请求关联的自定义用户信息(未发送到服务器)"。 处理完请求后,我会从请求对象中重新获取此" userInfo" 对象,并相应地执行操作。 我的ASIHTTPRequest代码示例是

请求:

ASIHTTPRequest

我想通过NSURLSession实现相同的功能,我该怎么做?

NSURLSession代码示例:

ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:@"http://www.google.com"];
[request setDelegate:self];
NSDictionary *userInfo = [NSDictionary dictionaryWithObject:[NSNumber numberWithInt:1] forKey:@"requestCount"];
[request setUserInfo:userInfo];

2 个答案:

答案 0 :(得分:0)

最简洁的方法是继承NSURLRequest并添加所需的属性 - 无论是标记,还是userInfo,并以与ASIHTTP框架相同的方式使用它。

答案 1 :(得分:0)

因为您正在使用完成处理程序,因此您可以使用块变量,请尝试以下代码:

    NSURLSessionConfiguration *defaultConfigObject = [NSURLSessionConfiguration defaultSessionConfiguration];
    NSURLSession *defaultSession = [NSURLSession sessionWithConfiguration: defaultConfigObject delegate: nil delegateQueue: self.queue];

    NSMutableURLRequest * urlRequest = [NSMutableURLRequest requestWithURL:url];
[urlRequest setTimeoutInterval:timeOutSeconds];

    __block NSDictionary *userInfo = [NSDictionary dictionaryWithObjectAndKeys...........];**

    NSURLSessionDataTask * dataTask =[defaultSession dataTaskWithRequest:urlRequest
                                                   completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
                                                       NSLog(@"Response:%@ %@\n", response, error);

                                                       NSLog(@"UserInfo: %@", userInfo);
                                                       if(error == nil)
                                                       {
                                                           NSString * text = [[NSString alloc] initWithData: data encoding: NSUTF8StringEncoding];
                                                           NSLog(@"Data = %@",text);

                                                           }
                                                       }

                                                   }];

    [dataTask resume];