Basters
@Basters
Кокер-спаниель

Секционные таблицы iOS?

Доброго времени суток. Вопрос следующий:
Мне с сервера приходит список объявлений (по 20 штук), у каждого объявления есть расстояние в километрах от пользователя, список сортируется по увеличению расстояния. Хочу сделать таблицу, в которой будут секции "До 3 км", "До 15 км" и более 15 км.

Как сделать механизм подгрузки/загрузки данных в таблицу с секциями?

Вот такая запись (не обращайте внимания на if (i==0) это не верное условие,

NSMutableArray* newPaths = [NSMutableArray array];
         for (int i = (int)[self.petsArray count] - (int)[pets count]; i < [self.petsArray count]; i++) {
             if (i == 0)
             {
                 [newPaths addObject:[NSIndexPath indexPathForRow:i inSection:0]];
             }
             else
             {
                 [newPaths addObject:[NSIndexPath indexPathForRow:i inSection:1]];

             }
         }
         
         [self.tableView beginUpdates];
         [self.tableView insertRowsAtIndexPaths:newPaths withRowAnimation:UITableViewRowAnimationTop];
         [self.tableView endUpdates];


ругается

Invalid update: invalid number of sections. The number of sections contained in the table view after the update (2) must be equal to the number of sections contained in the table view before the update (2), plus or minus the number of sections inserted or deleted (0 inserted, 1 deleted

Как правильно обновить таблицу?
  • Вопрос задан
  • 2355 просмотров
Решения вопроса 1
ManWithBear
@ManWithBear
Swift Adept, Prague
Заводите 3 массива для объявлений для 1 секции, для 2ой и для 3ей.
Добавляете следующие методы
- (NSInteger)numberOfSections {
    int count = 0;
    if (firstSectionArray.count) count++;
    if (secondSectionArray.count) count++;
    if (thirdSectionArray.count) count++;
    return count; 
}
- (NSInteger)numberOfRowsInSection:(NSInteger)section {
    switch (section) {
        case 0: return firstSectionArray.count; break;
        case 1: return secondSectionArray.count; break;
        case 2: return thirdSectionArray.count; break;
    }
    return 0;

При догрузке данных добавляете их в конец соответствующего массива.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы