2015-08-04 3 views
0

Я продолжаю работать с ошибкой утверждения, но я не уверен, как его решить.Удаление всех строк из UITableView

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

if (self.arrNonATIResults.count > 0) { 
     NSMutableArray* arrIndexPaths = [NSMutableArray array]; 
     for(int i=0; i<[self.arrNonATIResults count]; i++) { 
      NSIndexPath *anIndexPath = [NSIndexPath indexPathForRow:i inSection:0]; 
      [arrIndexPaths addObject:anIndexPath]; 
     } 

     [self.accountTable beginUpdates]; 
     [self.accountTable deleteRowsAtIndexPaths:arrIndexPaths withRowAnimation:UITableViewRowAnimationTop]; 
     self.arrNonATIResults = [NSMutableArray array]; 
     [self.accountTable endUpdates]; 
    } 

Он работал отлично. Перемещение этого кода в мое приложение, которое я провел в этой неудаче утверждение:

Invalid update: invalid number of rows in section 0. The number of rows contained in an existing section after the update (0) must be equal to the number of rows contained in that section before the update (3), plus or minus the number of rows inserted or deleted from that section (0 inserted, 2 deleted) and plus or minus the number of rows moved into or out of that section (0 moved in, 0 moved out). 

Вот где я путаюсь, self.arrNonATIResults (таблица DataSource) содержит два объекта (это жёстко) - так что таблица имеет только две строки , Где находится 3-я строка в сообщении об ошибке? Я прочитал, что если вы удалите все строки, вам также необходимо удалить раздел. Это третий элемент сообщения об ошибке?

Итак, я переписал свой первоначальный код, но это все равно не должно работать, потому что массив arrIndexPath будет включать только 2 NSIndexPaths. Может ли кто-нибудь указать мне в правильном направлении, что я делаю неправильно?

- (void) clearNonATITable { 

     if (self.arrNonATIResults.count > 0) { 

      NSMutableArray* arrIndexPaths = [NSMutableArray array]; 
      for(int i=0; i<[self.arrNonATIResults count]; i++) { 
       NSIndexPath *anIndexPath = [NSIndexPath indexPathForRow:i inSection:0]; 
       [arrIndexPaths addObject:anIndexPath]; 
      } 


      [self.accountTable beginUpdates]; 

      for (int i=0; i<arrIndexPaths.count; i++) { 

       NSIndexPath* thisIndexPath = [arrIndexPaths objectAtIndex:i]; 

       if (self.arrNonATIResults.count > 0) { 
        [self.accountTable deleteRowsAtIndexPaths:[NSArray arrayWithObjects:thisIndexPath, nil] withRowAnimation:UITableViewRowAnimationFade]; 
        [self.arrNonATIResults removeObjectAtIndex:0]; 
       } else { 
        NSIndexSet* setIndexSections = [[NSIndexSet alloc] initWithIndex:thisIndexPath]; 
        [self.accountTable deleteSections:setIndexSections withRowAnimation:UITableViewRowAnimationFade]; 
       } 
      } 

      [self.accountTable endUpdates]; 

     } 
    } 

ответ

1
[myArray removeAllObjects]; 
[tableView reloadData]; 
+1

Спасибо, я решил. Я делаю улучшения в существующем приложении, которое я не писал, и не понимал, что они используют 3 источника данных для таблицы. Просто нужно проверить, какой источник они используют, и подсчитывать, и добавить в мой массив такое же количество NSIndexPaths. – PruitIgoe

0

Этот вопрос был приложение использует 3 источников данных для этого одного Tableview - источник данных будет изменяться в зависимости от выбора управляющего сегмента. Мне просто нужно было определить, какой источник он был, и использовать его количество для удаления NSIndexPaths.

Смежные вопросы