Изображение Alamofire: изображение-заполнитель не установлено для af_setImageWithURL

Я использую af_setImageWithURL API Alamofire для получения изображений ячеек таблицы и передачи изображения-заполнителя по умолчанию:

let defaultImage = UIImage(named:"myImage")
cell.imageView.af_setImageWithURL(imageURL, placeholderImage:defaultImage, imageTransition: .CrossDissolve(0.1))

Проблема: когда моего изображения нет на пути загрузки, в ячейке также не отображается изображение по умолчанию. Когда я прокручиваю таблицу вверх и вниз (чтобы очистить и повторно использовать одну и ту же ячейку), она появляется.

ИЗМЕНИТЬ:

Заметил, что это происходит после удаления ячейки из очереди, я сначала сбрасываю изображение, а затем вызываю Alamofire. Если я прокомментирую строку ниже, все будет работать нормально, но тогда я столкнусь с риском показать старое изображение продукта, если URL-адрес изображения и изображения по умолчанию недоступны.

cell.imageView.image = nil

Кто сталкивался с подобной проблемой, подскажите.


person Abhinav    schedule 23.08.2016    source источник
comment
убедитесь, что изображение доступно или нет defaultImage   -  person Anbu.Karthik    schedule 23.08.2016
comment
defaultImage в порядке и показывает изображение. Как я уже сказал, изображение по умолчанию отображается при прокрутке таблицы вверх и вниз.   -  person Abhinav    schedule 23.08.2016
comment
можете ли вы показать дополнительный код, связанный с этим   -  person Anbu.Karthik    schedule 23.08.2016
comment
Как, например? Какой код вы хотите увидеть? Я думал, что все остальное не в контексте проблемы здесь.   -  person Abhinav    schedule 23.08.2016
comment
ячейка для кода rowat indexpath   -  person Anbu.Karthik    schedule 23.08.2016
comment
Нашел причину, по которой это происходит, но все еще ищу лучшую работу. Пожалуйста, смотрите мой обновленный пост.   -  person Abhinav    schedule 23.08.2016


Ответы (3)


Вам нужно убедиться, что вы отменили свой запрос, а также nil удалили изображение из prepareForReuse. В противном случае вы можете столкнуться с несколькими различными проблемами. Вот класс ImageCell в классе iOS Example в AFI.

class ImageCell: UICollectionViewCell {
    class var ReuseIdentifier: String { return "org.alamofire.identifier.\(type(of: self))" }
    let imageView: UIImageView

    // MARK: - Initialization

    override init(frame: CGRect) {
        imageView = {
            let imageView = UIImageView(frame: frame)

            imageView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
            imageView.contentMode = .center
            imageView.clipsToBounds = true

            return imageView
        }()

        super.init(frame: frame)

        contentView.addSubview(imageView)

        imageView.frame = contentView.bounds
    }

    required init(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }

    // MARK: - Lifecycle Methods

    func configureCell(with URLString: String, placeholderImage: UIImage) {
        let size = imageView.frame.size

        imageView.af_setImage(
            withURL: URL(string: URLString)!,
            placeholderImage: placeholderImage,
            filter: AspectScaledToFillSizeWithRoundedCornersFilter(size: size, radius: 20.0),
            imageTransition: .crossDissolve(0.2)
        )
    }

    override func prepareForReuse() {
        super.prepareForReuse()

        imageView.af_cancelImageRequest()
        imageView.layer.removeAllAnimations()
        imageView.image = nil
    }
}

Ваше здоровье. ????

person cnoon    schedule 24.08.2016
comment
что, если нам нужно использовать Disk Cache с af_setImage и URLRequest, - person Prashant Tukadiya; 25.05.2017

Для свифт 5

let imageView = UIImageView(frame: frame)
let url = URL(string: "https://httpbin.org/image/png")!
let placeholderImage = UIImage(named: "placeholder")!

imageView.af.setImage(withURL: url, placeholderImage: placeholderImage)
person Apple_Magic    schedule 01.04.2020

Как я уже упоминал, это хорошо работает, если я не устанавливаю nil изображения изображения ячейки непосредственно перед вызовом Alamofire. Итак, теперь я устанавливаю для изображения изображения ячейки значение nil только тогда, когда изображение по умолчанию равно нулю.

cell.imageView.image = nil
person Abhinav    schedule 23.08.2016