连接开始前设置标志

时间:2014-09-09 10:50:31

标签: ios objective-c

在viewDidLoad中我想多次调用webservice。 所以我在viewDidLoad中的代码如下

//Webservice call for industry list
NSURL *aUrl = [NSURL URLWithString:[NSString stringWithFormat:@"%@index.php/industry/industrylist",baseurl]];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:aUrl
                                                       cachePolicy:NSURLRequestUseProtocolCachePolicy
                                                   timeoutInterval:60.0];
[request setHTTPMethod:@"POST"];
[request setHTTPBody:[@"emailid=b@b.com&password=1234" dataUsingEncoding:NSUTF8StringEncoding]];
NSURLConnection *connection= [[NSURLConnection alloc] initWithRequest:request delegate:self];
//set flag for industryList
flag = @"industry";
[connection start];

//Webservice call for function list
NSURL *bUrl = [NSURL URLWithString:[NSString stringWithFormat:@"%@index.php/functionmdl/allFunctionlist",baseurl]];
NSMutableURLRequest *requestb = [NSMutableURLRequest requestWithURL:bUrl
                                                       cachePolicy:NSURLRequestUseProtocolCachePolicy
                                                   timeoutInterval:60.0];
[requestb setHTTPMethod:@"POST"];
[requestb setHTTPBody:[@"" dataUsingEncoding:NSUTF8StringEncoding]];
NSURLConnection *connectionb = [[NSURLConnection alloc] initWithRequest:requestb delegate:self];
//set flag for industryList
flag = @"functionmdl";
[connectionb start];

但是flag的值始终设置为functionmdl,因为我已经在上面代码的最后一行的前一行分配了带字符串的标志。我知道我正以错误的方式设置旗帜。那么,请告诉我如何在这里设置标志。基本上我想在connectionDidFinishLoading方法中使用这些标志。 我必须根据webservice调用区分webservice响应数据。 请帮我解决这个问题。

2 个答案:

答案 0 :(得分:1)

我认为您可以使用connection.currentRequest.URL来区分请求。

- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
    NSString *strUrl = [connection.currentRequest.URL absoluteString] ;
    // compare to the url of your request to distinguish them
}

答案 1 :(得分:0)

这里有几种方法(没有涉及标志)。

最简单的方法通常是使用[NSURLConnection sendAsynchronousRequest:queue:completionHandler]。然后,您可以将connectionDidFinishLoading代码放在此处,具体针对每个请求。

如果您需要NSURLConnectionDelegate的更多高级功能(如响应身份验证请求),那么这不起作用。在这种情况下,我通常建议您将连接和委托包装到一个单独的对象中,并为每个连接实例化一个。这样,每个对象只是一个连接的委托。

在少数情况下,这仍然不合适,在这种情况下,您可以在委托(connection.currentRequest)中检查连接的请求,以确定您正在调用哪一个。在某些情况下,我创建了一个可变字典属性,将NSURLRequest信息映射到处理程序中我想要的其他元数据。

在最花哨的(因此也是最常用的)情况下,您可以使用objc_setAssociatedObject将元数据(例如标识符)附加到您的连接,但这很少是必需的。

但我会看[NSURLConnection sendAsynchronousRequest:queue:completionHandler]。它是最简单的使用方式,可以轻松解决最常见的情况。