在同一控制器中使用多UITableView多次调用NSURLConnection

时间:2014-01-31 05:31:36

标签: iphone uitableview nsurlconnection

我必须在同一个视图控制器中调用两个不同的API,并且必须在同一控制器中的两个tableView上显示数据,我正在使用NSURLConnection。但是我无法在tableView上显示结果。

只有urlConnection(对于firstTimeCall)给出了结果。对于secondTimeCall,结果为0。

任何人都可以请我提供样品或能够建议我这样做的方法。

提前致谢。

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.



    [self firstTimeCall];
    [self SecondTimeCall];

}

- (void)firstTimeCall
{
    NSURLRequest *request=[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://xyza.com/key=init"]];
    responseData=[[NSMutableData alloc]init];
    urlConnection=[[NSURLConnection alloc]initWithRequest:request delegate:self];
    NSLog(@"nsurl FirstTimeCall %@",urlConnection);
}

- (void)SecondTimeCall
{
    NSURLRequest *requestTwo=[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://abcz.com/key=init"]];
    responseDataTwo=[[NSMutableData alloc]init];
    urlConnectionTwo=[[NSURLConnection alloc]initWithRequest:requestTwo delegate:self];
    NSLog(@"nsurl SecondTimeCall %@",urlConnectionTwo);
}


- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error{

    if (connection == urlConnection) {
        NSLog(@"Error");
    }
    else {
        NSLog(@"Error");
    }

}

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{

    if (connection == urlConnection) {
        [responseData setLength:0];
    }
    else {
        [responseDataTwo setLength:0];
    }

}

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{

    if (connection == urlConnection) {
        [responseData appendData:data];
        NSLog(@"%@",responseData);
    }
    else {
        [responseDataTwo appendData:data];
        NSLog(@"%@",responseDataTwo);
    }


}

- (void)connectionDidFinishLoading:(NSURLConnection *)connection {

    if (connection == urlConnection) {
        NSError *error=nil;
        NSDictionary *dic=[NSJSONSerialization JSONObjectWithData:responseData options:NSJSONReadingMutableContainers error:&error];
        self.totalData=[dic objectForKey:@"data"];
        NSLog(@"%@",totalData);
        NSLog(@"First Time...............%d",totalData.count);


          [tableViewOne reloadData];
    }
    else {
        NSError *error=nil;
        NSDictionary *dic=[NSJSONSerialization JSONObjectWithData:responseData options:NSJSONReadingMutableContainers error:&error];
        self.totalDataTwo=[dic objectForKey:@"data"];
        NSLog(@"%@",totalDataTwo);
        NSLog(@"Second Time...............%d",totalDataTwo.count);


          [tableViewTwo reloadData];
    }


}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    if(tableView==tableViewOne){
        NSLog(@"In TableViewOne numOfRow");
        return [totalData count];


    }else{
        NSLog(@"In TableViewTwo numOfRow");
        return [totalDataTwo count];
    }

}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *simpleTableIdentifier = @"NewCell";

    if(tableView==tableViewOne){
        NSLog(@"In TableViewOne Cell4Row");
        NewCell *cell = (NewCell *)[tableViewOne dequeueReusableCellWithIdentifier:simpleTableIdentifier];
        if (cell == nil)
        {

            NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"NewCell" owner:self options:nil];
            cell = [nib objectAtIndex:0];



        }

        cell.nameLabel.text = @“Testing1;
        return cell;

    }else{
        NSLog(@"TableViewTwo Cell4Row");
        NewCell *cell = (NewCell *)[tableViewTwo dequeueReusableCellWithIdentifier:simpleTableIdentifier];
        if (cell == nil)
        {

            NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"NewCell" owner:self options:nil];
            cell = [nib objectAtIndex:0];



        }

        cell.nameLabel.text = @“Testing2”;
        return cell;


    }

}

2 个答案:

答案 0 :(得分:0)

调用方法[self firstTimeCall];和[self SecondTimeCall];以同步方式。默认情况下,这次你在ur代码中以异步方式调用方法。

首先调用[self firstTimeCall];方法,当你收到响应,并且你在firstDacall的connectionDidFinishLoading委托方法中得到调用,然后从这里开始调用SecondTimeCall。 第一次调用firstTimeCall adn在完成此调用后收到服务器的数据响应,现在调用SecondTimeCall。

答案 1 :(得分:0)

我假设NSLog中的两个didReceiveData很好,但只是第二个连接的connectionDidFinishLoading登录错误了吗?这是因为connectionDidFinishLoading的后半部分,您正在查看responseData,我认为您打算查看responseDataTwo。我还建议你更新你的NSLog语句,以清楚地说明哪个是#1,哪个是#2(例如在didReceiveData,你只是记录,但你不知道哪个是哪个(虽然通过查看数据,我怀疑你可以做出明智的猜测。)。