перезагрузка таблицы, когда источник NSURLConnection и получает новые данные - PullRequest
0 голосов
/ 23 октября 2010

Я приложение tabController с uitableview получает данные NSURLconnection и пытается их отобразить.Я не могу понять проблему.Если я заменяю соединение массивом, я сохраняю все детали сверки, но обновление не делает, так что я думаю, что конец tableView в порядке.НО:

Если я поставлю [[self.tableview] reloadData];в - (void) connectionDidFinishLoading:

Это вызывает цикл моей родительской строки в представлении.Когда вы выбираете строку, она заполняется той же строкой «Заголовок», а не ее дочерней.Если я удалю [[self.tableview] reloadData];TableDataSource3 пуст и не обновляется с данными URL, поэтому мне это нужно. У меня есть NSLogs, которые показывают обновление, поэтому я знаю, что оно обновляется.

Если я поставлю [[self.tableview] reloadData];в ViewDidAppear:

Представление пусто до тех пор, пока я не выйду из таблицы и вернусь (приложение является контроллером табуляции с tableViews).Если я добавлю строку в базу данных и обновлю через NSURL-соединение, tableView останется без изменений, но если я выберу строку, новые данные, которые были обновлены, появятся в отправленной таблице.

Если я поставлю [[self.tableview] reloadData];в ViewWillAppear:

Представление пусто, пока я не выйду из таблицы и не вернусь.тем не менее, толкнутое дочернее представление пусто.

Любые идеи?

Вот конец соединения NSURL 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 голосов
/ 23 октября 2010

Трудно отследить, что вы говорите ... и ваш код требует форматирования (см. Выше)

Try ...

  • Начните запрос NSURLConnection в -viewDidLoad
  • [[self tableView] reloadData]; следует вызывать только в connectionDidFinishLoading: или после любого обновления вашего массива данных вне запроса NSURLConnection.
  • in connectionDidFinishLoading: self.tableDataSource3 = [[NSArray alloc] initWithArray:test]; before the [[self tableView] reloadData];
...