使用NSURLConnection didReceiveData进行多次调用

时间:2015-10-22 22:07:54

标签: ios objective-c nsurlconnection

我想在这里获得一些设计/代码建议。

我有一个应用程序需要调用3个api的Web服务。这些发生在不同的视图中,但我需要来自这3个api的所有信息都在一个对象中。所以我将一个对象从视图控制器传递到另一个对象,并在我对web服务进行https调用时向其添加数据。

我创建了一个名为PostToServer的函数,它根据"类型"调用webapi。并选择用于帖子的相应URL。但是只有一个didReceiveData调用。我正在存储"类型" api在对象的变量中,以便在didReceiveData中我可以适当地解析响应。

有没有更好的方法来使用相同的NSURLConnection代码来处理多个webapi调用?我是obj-c的新手,所以我想确保我正确使用语言结构。

2 个答案:

答案 0 :(得分:2)

他们是NSURLConnection类的一个委托“ - (void)连接:( NSURLConnection *)连接didReceiveResponse:(NSURLResponse *)响应”并且在其中它们是参数响应,并且此响应具有属性“URL”,通过它您可以知道此响应是针对哪个URL请求。 “didReceiveResponse”方法被调用一次然后调用“didReceiveData”,因此您可以相应地进行检查和逻辑。

答案 1 :(得分:0)

我使用AFNetworking而不是NSURLConnection。如果您需要3个请求来构建一个对象,则可以将此对象从一个连接传递到另一个连接并添加缺少的数据。

    NSString *urlString = ...

    NSDictionary *parameters = @{@"username": username,
                                 @"password": password,
                                 };

    AFHTTPSessionManager *manager = [[AFHTTPSessionManager alloc] init];
    [manager.requestSerializer setTimeoutInterval:10.0];
    manager.responseSerializer = [AFJSONResponseSerializer serializer];
    manager.responseSerializer.acceptableContentTypes = [manager.responseSerializer.acceptableContentTypes setByAddingObject:@"text/json"];

    [manager POST:urlString parameters:parameters success:^(NSURLSessionDataTask *task, id responseObject) {
        Person *person = [Person new];
        person.name = [responseObject valueForKey:@"name"];
        person.city = [responseObject valueForKey:@"city"];

       [self callSecondRequest:person];


    } failure:^(NSURLSessionDataTask *task, NSError *error) {


    }];

}

方法callSecondRequest:会将另一个请求中的数据添加到对象中。

另一种选择是同时运行3个共享同一对象的请求。