Непонятная проблема с TableView


#1

Опишу суть проблемы: есть таблица TableView в таблице в ячейках есть кнопка, по нажатию которой вызывается и открывается ViewController методом present, закрывается по кнопке методом dismiss. Так вот если например нажимаем кнопку в первой ячейке открывается вьюконтролер, далее закрываем вьюконтроллер и почемуто после закрытия вьюконтролера таблица скролится, вернее сказать даже не скролится т.к. нет анимации а показывается десятая ячейка. Добрые люди подскажите с чем это может быть связано в каких настройках таблицы или вьюконтролера посмотреть этот баг? В таблице используется динамическая высота ячеек. Заранее всем спасибо.


#2

наверное нашел решение данной проблемы, проверить только не могу нет доступа к моему маку


завтра проверю и отпишусь


#3

может ты при viewWillAppear обновляешь данные и таблицу?


#4

При обновлении таблицы скролл идет в начало таблицы, а не в конец.


#5

я ж глупый. без кода такое разрулить не смогу :slight_smile:


#6

если честно, то странное поведение и я пока не могу придумать что может такое вызывать.


#7

нашел решение для меня

секция для свифта
@Igor answer is working fine in this case, Swift-4 code of it.

работает четко


#8

да в этом методе обновляю таблицу вилапиар


#9

Странно конечно.
Но это лечится лишь последствие, а не причина.
Я уже столько таблиц разных делал и с динамическими ячейками. Никогда такого у себя не встречал.

Покажите сам метод обновления. Может там что-то не так.


#10
override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
        PrayService.instance.feedAllPrays(ofType: prayType) { (prays) in
            self.prays = prays
            self.tableView.reloadData()
        }
    }

#11

У тебя при каждом появлении экрана обновление происходит. Так ли это необходимо?


#12

плюс утечка памяти идет.


#13

Ты про это?

Разве? Если этот Closure в PrayService не сохраняется, то поидеи не будет утечки. Проверял так:

P/S: Только вызывать надо это:

self.toster?.execute {
self.kaboom()
}

И лог вывода будет такой, т.е утечки нету получается.

Toster -> init
Runner -> init
Runner -> setup callback to toster: Optional(tosterv2.Toster)
Runner -> Kaboom!
Runner -> Runned
Toster -> deinit
Runner -> deinit

Или я не правильно натестил?


#14

Утечки проверить можно:

  1. посмотреть, сработает ли деиницилизатор
  2. запустить инструменты xCode и посмотреть утечки памяти

С утечками не все так просто бывает. Взять синтетический пример и все пашет. Перенести в реальный и кирдык. Проверь этот код в инструменте memory leaks и если так ок - значит утечек нет.