Перезагрузить данные табличного представления с видимыми существующими данными

Я использую стандартный метод извлечения и анализа JSON через AFNetworking, затем данные используются для заполнения табличного представления.

NSURL *url = [NSURL URLWithString:serverURL];
NSURLRequest *request = [NSURLRequest requestWithURL:url];

AFJSONRequestOperation *operation = [AFJSONRequestOperation
                                     JSONRequestOperationWithRequest:request
                                     success:^(NSURLRequest *request, NSHTTPURLResponse *response, id json) {
                                         [refresh endRefreshing];
                                         self.results = [json valueForKeyPath:@"data"];
                                         [self.tableView reloadData];
                                     } failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id JSON) {
                                         [refresh endRefreshing];
                                     }];
[self.tableView reloadData];
[operation start];

Как бы то ни было, каждый раз, когда пользователь тянет, чтобы обновить все табличное представление, оно исчезает, и новые данные загружаются, а затем представляются пользователю через секунду или около того. Однако я хочу, чтобы данные в таблице оставались там до тех пор, пока новые данные не будут доступны и загружены. Поэтому я закомментировал [self.tableView reloadData];, думая, что это заставит его работать, в то время как заметно и в течение первых нескольких секунд это работает, однако вскоре после этого приложение вылетает. С ошибкой:

Завершение работы приложения из-за необработанного исключения "NSRangeException", причина: "* -[__NSArrayI objectAtIndex:]: индекс 1 за пределами пустого массива"

Теперь я даже не совсем уверен, что это правильный способ сделать это, поэтому, в основном, мой вопрос заключается в том, как мне сохранить данные в табличном представлении до тех пор, пока не будут загружены новые данные, или переместить существующие данные вниз в табличное представление, вроде того, как приложения Facebook и Twitter делают, когда вы обновляете ленту новостей/хронологию.

ОБНОВИТЬ

Я пробовал этот метод:

NSIndexPath *indexPath = [NSIndexPath indexPathForRow:[self.results count] inSection:0];
NSArray *indexArray = [NSArray arrayWithObjects:indexPath, nil];
[self.tableView insertRowsAtIndexPaths:indexArray withRowAnimation:UITableViewRowAnimationAutomatic];

Но я получаю следующую ошибку:

Завершение работы приложения из-за необработанного исключения «NSInternalInconsistencyException», причина: «попытка вставить строку 15 в раздел 0, но после обновления в разделе 0 осталось только 15 строк»


person Alex Saidani    schedule 06.08.2013    source источник


Ответы (1)


В вашем блоке успеха вам нужно будет сначала проверить, получаете ли вы данные. Если есть какие-либо данные, перезагрузите табличное представление с новыми данными, иначе вам не следует пытаться изменить существующие данные. Попробуй это.

  NSArray *tempResults = [json valueForKeyPath:@"data"];
  if(tempResults && [tempResults count] > 0)
  {                                             
      self.results = tempResults;                                        
  }                                        
  [self.tableView reloadData];

Держите точку останова на tempResults и смотрите, какие данные вы получаете.

person nithinbhaktha    schedule 06.08.2013
comment
Спасибо за ответ, но это не совсем ответ на вопрос. Я пытаюсь добавить новые данные поверх существующих данных, а не просто перезагружать таблицу новыми данными. - person Alex Saidani; 06.08.2013