@Scorpiored88

Как обновить данные UITableView в objective c?

Всем доброго. Вот играю с таблицами.
Создал я таблицу
.h
@property (strong,nonatomic) NSMutableArray* animals;
@property (weak, nonatomic) IBOutlet UITableView *animalsTable;

.m


- (void)viewDidLoad {
    self.animalsTable.dataSource = self;
    self.animalsTable.delegate = self;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return [_animals count];
}


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    static NSString * cellId = @"Cell";
    UITableViewCell* cell = [tableView dequeueReusableCellWithIdentifier:cellId];
    if (cell == Nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:cellId];
    }
    
    UIImage* simpleAnimals = [UIImage imageNamed:@"Tiere-coloured.png"];
    cell.imageView.image = simpleAnimals;
    
    cell.textLabel.text = [[_animals objectAtIndex: indexPath.row] name];
    
    NSString* deatail = [NSString stringWithFormat:@"age: %@; color: %@" ,[[_animals objectAtIndex: indexPath.row] age],[[_animals objectAtIndex: indexPath.row] ownColor]];
    cell.detailTextLabel.text =  deatail;
    
    return cell;
}

с данными от NSMutableArray* animals, потом я этот масив изменяю путем добавления в него новых данных, но после этого никак не получается обновить данные таблицы :( Конечно можно после добавления элемента в масив пересоздать эту таблицу но чувствую, что так нельзя.
вариант [_animalsTable reloadData] не работает :(

Подскажите пожалуйста
  • Вопрос задан
  • 462 просмотра
Пригласить эксперта
Ответы на вопрос 2
@i_allar
dequeueReusableCellWithIdentifier - лучше юзайте другой метод - dequeueReusableCellWithIdentifier:indexPath и тогда проверка if (cell == Nil) никогда не вызоветься, ячейка всегда есть и соответственно код можно сократить. Лучше использавать свой класс для ячейки, сабкласс от UITableViewCell, так легче ее настроивать, затем просто вызываете reloadData, и таблица перегружаеться. также поставте в storyboard тип таблицы - динамическая
Ответ написан
Комментировать
AndreySlimus
@AndreySlimus
При добавлении данных в таблицу следует использовать методы beginUpdates и endUpdates. Добавление, как и удаление в таком случае, осуществляется с анимацией.
Желательно, что бы insertSection соответствовал индексу объекта в массиве. Если добавляется объект в начало массива, то индекс insertSection должен быть равен нулю.

[self.tableView beginUpdates];
  
NSIndexSet* insertSection = [NSIndexSet indexSetWithIndex:0];
    
[self.tableView insertSections:insertSection withRowAnimation:UITableViewRowAnimationTop];
    
[self.tableView endUpdates];


Выше код для вставки секции. Что бы вставить ячейку в секцию подходит метод:
- (void)insertRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation;
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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