当源是NSURLConnection并获取新数据时重新加载tableview

时间:2010-10-22 23:09:00

标签: iphone uitableview nsurlconnection

我使用uitableview的tabController应用程序获取NSURLconnection数据并尝试显示它。我无法弄清楚这个问题。如果我用数组替换连接,我将存储所有向下钻取工作,但更新没有,所以我认为tableView结束的事情很好。但是:

如果我放[[self.tableview] reloadData];在 - (void)connectionDidFinishLoading:

这会导致我的父行在视图上循环。当您选择一行时,它会使用相同的行“标题”重新填充,而不是它的子项。如果我删除了[[self.tableview] reloadData]; tableDataSource3是空的,不会刷新URL数据所以我需要它。我有NSLogs显示更新所以我知道它正在更新。

如果我放[[self.tableview] reloadData];在ViewDidAppear中:

视图为空,直到我离开桌子并返回(应用程序是带有tableViews的tabcontroller)。如果我在数据库中添加一行并通过NSURL连接进行更新,则tableView将保持不变,但如果我选择一行,则更新的新数据将显示在推送的表中。

如果我放[[self.tableview] reloadData];在ViewWillAppear中:

视图为空,直到我离开桌子并返回。但是,推送的子视图为空。

任何想法?

这是NSURLconnection meth

的结尾
    -(void) connectionDidFinishLoading:(NSURLConnection *)conn3 {

 ~ JSON STUFF~

  NSArray *test = [json objectForKey:@"Rows"];
  tableDataSource3 = [[NSArray alloc] initWithArray:test];


  [json release];
  [conn3 release];
  self.receivedData =nil;
  [[self tableview] reloadData];
    }

以下是选择方法:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

  //Get the dictionary of the selected data source.
 NSDictionary *dictionary = [self.tableDataSource3 objectAtIndex:indexPath.row];

 //Get the children of the present item.
 NSArray *Children = [dictionary objectForKey:@"Children"];

 if([Children count] == 0) {

  ItemDetailViewController *dvController = [[ItemDetailViewController alloc] initWithNibName:@"ItemDetailView" bundle:[NSBundle mainBundle]];
  [self.navigationController pushViewController:dvController animated:YES];
  [dvController release];
 }
 else {

   //Prepare to tableview.
  ThirdTab *rvController = [[ThirdTab alloc] initWithNibName:@"SecondView" bundle:[NSBundle mainBundle]];


  rvController.CurrentLevel3 += 1;


  rvController.CurrentTitle3 = [dictionary objectForKey:@"Title"];
  [self.navigationController pushViewController:rvController animated:YES];

  rvController.tableDataSource3 = Children;

  [rvController release];
 }

}

1 个答案:

答案 0 :(得分:0)

很难跟踪你所说的内容......而且你的代码需要格式化(上图)

...试

  • 在-viewDidLoad
  • 中启动NSURLConnection请求
  • [[self tableView] reloadData];只应在connectionDidFinishLoading:中调用,或者在NSURLConnection请求之外对数据数组进行任何更新后调用。
  • connectionDidFinishLoading: self.tableDataSource3 = [[NSArray alloc] initWithArray:test]; before the [[self tableView] reloadData];