我必须在同一个视图控制器中调用两个不同的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;
}
}
答案 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
,你只是记录,但你不知道哪个是哪个(虽然通过查看数据,我怀疑你可以做出明智的猜测。)。