Класс данных Swift и ошибка времени выполнения UITableViewController - PullRequest
0 голосов
/ 11 мая 2018

У меня ошибка во время выполнения.Iv только что прочитал «Разработка приложений с помощью Swift»

«Тема 1: Неустранимая ошибка: неожиданно обнаружен ноль при развертывании необязательного значения»

Пожалуйста, помогите, я ужезнаком с if let, условным связыванием, не уверен, где я должен был бы использовать его в этом случае, чтобы показать мой UIImage.

Все еще в целом новый для swift, и IOS Identifier уже настроен, и tableViewController на раскадровке также установлен на MammaSitaTableViewController.

Я могу заставить само свойство text отображатьсяна экране, но только если я снимаю свойство изображения.

class MammaSitaTableViewController: UITableViewController {

var mammaSitas : [MammaSita] =
    [
        MammaSita(name: "Megan Fox", photo: UIImage(contentsOfFile: "Megan.jpg")! ),
        MammaSita(name: "Scarlet Johanson", photo: UIImage(contentsOfFile: "Scarlet.jpg")! ),
        MammaSita(name: "Bella Hadid", photo: UIImage(contentsOfFile: "Bella.jpg")! )

    ]   // end of delcared array mammaSitas
 }          


 // MARK: - Table view data source
//numberOfSections Optional
override func numberOfSections(in tableView: UITableView) -> Int {

    return 1
}

//
// numberOfRowsInSection manditory to use dataSource
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

    if section == 0 {
        return mammaSitas.count
    } else {
        return 0
    }

}

//
// cellForRowAtIndexPath manditory to us dataSource
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

    //1 dequeueReusableCell
    let cell = tableView.dequeueReusableCell(withIdentifier: "WomenCell", for: indexPath)

    //2 fetch model object to be displayed
   let mamaCita = mammaSitas[ indexPath.row ]

    //3 configure cells properties
    cell.textLabel?.text = "\(mamaCita.name)"
    cell.imageView?.image = mamaCita.photo 

    //4 return cell
    return cell
}

Ответы [ 3 ]

0 голосов
/ 11 мая 2018

Вы можете использовать условное связывание следующим образом ...

var mammaSitas = [MammaSita]()
    if let img = UIImage(contentsOfFile: "Megan.jpg") {
        let obj = MammaSita(name: "Megan Fox", photo: img)
        mammaSitas.append(obj)
    }

    if let img = UIImage(contentsOfFile: "Scarlet.jpg") {
        let obj = MammaSita(name: "Scarlet Johanson", photo:  img)
        mammaSitas.append(obj)
    }

    if let img = UIImage(contentsOfFile: "Bella.jpg") {
        let obj = MammaSita(name: "Bella Hadid", photo: img)
        mammaSitas.append(obj)
    }

Если у вас есть изображение в активах изображения, вам нужно использовать следующее для получения изображения.

 let img = UIImage(named: "Megan.jpg")

Вы используете contentsOfFile: для получения изображения, поэтому, вероятно, вместо имени изображения должен быть путь к изображению (например, "Megan.jpg").

let img = UIImage(contentsOfFile: <#imagePath#>) //not the image name "Megan.jpg"

Надеюсь, это поможет:)

0 голосов
/ 11 мая 2018

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

UIImage(contentsOfFile: "imageName.jpg")!

напишите это

UIImage(contentsOfFile: "imageName.jpg") ?? UIImage()

и вместо ошибки у вас будет пустое изображение

Если это не решит проблему, то проблема в переменной nil - IBoutlet представления изображения внутри ячейки.Так что поместите отладчик и посмотрите, что ноль

0 голосов
/ 11 мая 2018

Единственная развертка необязательного значения в вашем коде находится в конструкторе массива mammaSitas: UIImage (contentsOfFile: "Megan.jpg")! и др.

Поэтому проверьте, действительно ли файлы с изображениями существуют в их путях.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...