Только последние сохраненные данные отображаются в виде стека

Я делаю вызов API, который возвращает набор пары ключ-значение, который я хочу отобразить на экране. Я использую файл xib и добавляю к нему пару ключ-значение. На дисплее отображается только последняя пара значений ключа. Это делается с использованием архитектуры MVVM.

@IBOutlet var currentBenefitsStackView: UIStackView!

func populateMemberBenefits(_ data: ResponseData) {
        let nib = UINib(nibName: "StackView", bundle: Bundle.SampleAccount)
        if let memberBenefitsView = nib.instantiate(withOwner: nil, options: nil).first as? StackView {
             guard let memberBenefitsPerks = data.benifts else {return} //data.benifts contains the key value pairs
            for benefits in memberBenefitsPerks {
                memberBenefitsView.labelText?.text = benefits.value
                let imageURL = URL(string: "(SampleURL)")
                let image = try? Data(contentsOf: imageURL!)
                memberBenefitsView.imageView.image = UIImage(data: image!)
                currentBenefitsStackView.addArrangedSubview(memberBenefitsView)
            }

Только последнее изображение memberBenefitsView отображается в currentBenefitsStackView. Может ли кто-нибудь указать мне, где я делаю ошибку, или если требуется дополнительная информация.

Всего 1 ответ


Вы выделяете только один memberBenefitsView и продолжаете обновлять его. Это останется с окончательными назначенными значениями.

Вам нужно распределить представление в каждой итерации цикла for :

func populateMemberBenefits(_ data: ResponseData) {
    let nib = UINib(nibName: "StackView", bundle: Bundle.SampleAccount)
    guard let memberBenefitsPerks = data.benifts else {return} //data.benifts contains the key value pairs
    for benefits in memberBenefitsPerks {
        if let memberBenefitsView = nib.instantiate(withOwner: nil, options: nil).first as? StackView {
            memberBenefitsView.labelText?.text = benefits.value
            let imageURL = URL(string: "(SampleURL)")
            let image = try? Data(contentsOf: imageURL!)
            memberBenefitsView.imageView.image = UIImage(data: image!)
            currentBenefitsStackView.addArrangedSubview(memberBenefitsView)
        }
    }
}

Есть идеи?

10000