Неустранимая ошибка при установке значения для ячейки TableView - PullRequest
1 голос
/ 25 октября 2019

Я получаю эту ошибку при попытке передать значения в текстовые метки

Fatal error: Unexpectedly found nil while implicitly unwrapping an Optional value:

После прочтения ТАКОЙ темы по этому поводу я попробовал следующее, но безуспешно:

  1. распечатал каждое из значений из photo, и значение было правильным, а не nil
  2. удалил и заново подключил розетки
  3. создал фиктивное значение username1Label.text = "test" и ту же ошибку

Вот упрощенная версия кода:

class EventFeedCell: UITableViewCell {

@IBOutlet weak var username1Label: UILabel!
@IBOutlet weak var date1Label: UILabel!
@IBOutlet weak var photoId1Label: UILabel!

func setPhoto(_ photo:Photo) {

    username1Label.text = photo.byUsername  //I get the fatal error here
    date1Label.text = photo.date
    photoId1Label.text = photo.postId
}}

И Photo объект

class Photo {

var postId = ""
var byId = ""
var byUsername = ""
var date = ""
var url = ""
var eventId = ""

}

cellForRowAt

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

    //Get a event feed photo cell
    let cell = tableView.dequeueReusableCell(withIdentifier: EventFeedCell.eventFeedPhotoTableCell, for: indexPath) as! EventFeedCell

    //Get the photo for this row
    let photo = photos[indexPath.row]

    //Set the details for the cell
    cell.setPhoto(photo)

    return cell

}

Что еще можно попробовать? Это точная копия другой ячейки TableView, которая работает (и по этой причине я добавил 1 в имена меток, просто чтобы убедиться, что они уникальны)

1 Ответ

1 голос
/ 25 октября 2019

Как только ячейка инициализируется, ваши метки и другие компоненты пользовательского интерфейса могут быть равны нулю, поэтому вы должны устанавливать значение только в том случае, если ваши компоненты пользовательского интерфейса (ярлыки и т. Д.) Инициализируются, в противном случае не устанавливайте. Просто добавьте ?, прежде чем получить доступ к свойствам текста. Вот модифицированная версия вашего setPhoto(:) метода.

func setPhoto(_ photo:Photo) {

    username1Label?.text = photo.byUsername  
    date1Label?.text = photo.date
    photoId1Label?.text = photo.postId
}

Стоит отметить, что если ваши свойства photoModel являются необязательными, вы должны сначала развернуть их, прежде чем пытаться получить к ним доступ. Ниже приведена другая версия вашего метода setPhoto(:), только если ваша фотомодель имеет дополнительные свойства.

func setPhoto(_ photo:Photo) {
      // Optionally unwrap your photo properties.
     gaurd let byUserName = photo.byUsername,
      let  date = photo.date,
      let postId = photo.postId else {return}

    // Safe to proceed if all your values are set in photoModel
    username1Label?.text = byUserName  
    date1Label?.text = date
    photoId1Label?.text = postId
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...