Изображение не отображается в ячейке таблицы - PullRequest
0 голосов
/ 27 апреля 2020

Я новичок в Swift и пытаюсь создать таблицу, которая показывает изображение в каждой ячейке, но изображение не отображается.

Сначала я создаю структуру "Meme":

struct Meme {
    var topText: String
    var bottomText: String
    var originalImage: UIImage
    var memedImage: UIImage

    init(topText: String, bottomText: String, originalImage: UIImage, memedImage: UIImage) {
        self.topText = topText
        self.bottomText = bottomText
        self.originalImage = originalImage
        self.memedImage = memedImage
    }
}

Во-вторых, я ставлю var memes = [Meme]() в AppDelegate. Это в соответствии с инструкцией к учебнику.

В-третьих, я добавляю экземпляр структуры следующим образом:

    @IBAction func shareButton(_ sender: UIBarButtonItem) {

        if let topText = topTextField.text, let bottomText = bottomTextField.text {

            let memedImage = generateMemedImage()
            let finishedMeme = Meme(topText: topText, bottomText: bottomText, originalImage: imageView.image!, memedImage: memedImage)
            let ac = UIActivityViewController(activityItems: [memedImage], applicationActivities: nil)
            present(ac, animated: true, completion: nil)
            ac.completionWithItemsHandler = { activity, success, items, error in
                if success {
                    let object = UIApplication.shared.delegate
                    let appDelegate = object as! AppDelegate
                    print(finishedMeme)
                    appDelegate.memes.append(finishedMeme)
                    return
                } else {
                    print("cancel")
                }
                if let shareError = error {
                    print("error while sharing: \(shareError.localizedDescription)")
                }
            }
        }
    }

print(finishedMeme) здесь показано, что добавляются правильные данные.

И, наконец, у меня есть ViewController:

    var memes = [Meme]()
    let appDelegate = UIApplication.shared.delegate as! AppDelegate

    override func viewDidLoad() {
        super.viewDidLoad()
        self.tableView.reloadData()
        memes = appDelegate.memes
    }

    override func numberOfSections(in tableView: UITableView) -> Int {
        return 1
    }

    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return memes.count
    }

    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "TableViewCell", for: indexPath) 
        let meme = self.memes[indexPath.row]
        cell.imageView?.image = meme.memedImage
        return cell
    }

Приложение работает без сбоев, за исключением того, что изображения не отображаются ни в одной из ячеек. В консоли появляется сообщение:

Meme [7928: 464364] Соединение [ShareSheet] недействительно

Я попытался установить ячейку в классе по умолчанию UITableViewCell, а также попытался создать собственный класс и присвоить перезагруженные данные этим свойствам, но ни одно из них не работает:

class TableViewCell: UITableViewCell {

    @IBOutlet weak var cellLabel: UILabel!
    @IBOutlet weak var memeImageView: UIImageView!

}

1 Ответ

1 голос
/ 27 апреля 2020

В вашем ViewController вы должны перезагрузить данные таблицы перед добавлением данных в массив, используйте код ниже

 memes = appDelegate.memes
 self.tableView.reloadData()

вместо

 self.tableView.reloadData()
 memes = appDelegate.memes
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...