我想在这里获得一些设计/代码建议。
我有一个应用程序需要调用3个api的Web服务。这些发生在不同的视图中,但我需要来自这3个api的所有信息都在一个对象中。所以我将一个对象从视图控制器传递到另一个对象,并在我对web服务进行https调用时向其添加数据。
我创建了一个名为PostToServer的函数,它根据"类型"调用webapi。并选择用于帖子的相应URL。但是只有一个didReceiveData调用。我正在存储"类型" api在对象的变量中,以便在didReceiveData中我可以适当地解析响应。
有没有更好的方法来使用相同的NSURLConnection代码来处理多个webapi调用?我是obj-c的新手,所以我想确保我正确使用语言结构。
答案 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个共享同一对象的请求。