Как будто вы пытаетесь получить доступ к объекту, который является null
. Рассмотрим ниже пример:
TypeA objA;
. В это время вы только что объявили этот объект, но не инициализировали или не инициализировали. И всякий раз, когда вы пытаетесь получить доступ к каким-либо свойствам или методам в нем, он будет генерировать NullPointerException
, что имеет смысл.
См. Также этот пример:
String a = null;
System.out.println(a.toString()); // NullPointerException will be thrown
У вас проблема с повторным использованием ячеек.
По сути, происходит то, что tableView создает только столько ячеек, сколько видимых на экране, и как только ячейка прокручивается из поля зрения, она снова используется для другого элемента в вашем источнике данных.
Причина, по-видимому, исчезновения кнопок в том, что вы уже удалили кнопку ранее, но теперь, при повторном использовании, не сказали ячейке снова показывать кнопку.
Исправить это легко, просто добавьте:
cell.addButtonOutlet.alpha = 0
в свои секции 0 и 2 (еще блок).
То же самое с изображениями, предыдущее изображение сохраняется, если только вы не скажете ячейке удалить изображение при необходимости, поэтому просто добавьте это:
if let imgid = img {
let url = MTApi.url(for: imgid, size: .normal)
cell.userImageView.sd_setImage(with: url, placeholderImage: nil, options: [], completed: nil)
} else {
cell.userImageView.image = nil
}
var name: String = ""
var job: String = ""
var company: String = ""
var img: Int?
cell.userImageView.layer.cornerRadius = 45
cell.userImageView.clipsToBounds = true
cell.addButtonOutlet.alpha = 1 // add more
if indexPath.section == 0 {
........
и вам следует изучить возможность повторного использования UITableviewCell.