2016-02-03 2 views
0

Эй У меня есть специальный метод инициализации в моей пользовательской UIView так:Сбоя при разворачивании варианта, даже если это не ноль

init(frame: CGRect, otherUser: MyUser?) { 

     self.otherUser = otherUser 
     super.init(frame: frame) 
     if self.otherUser != nil { 
      print("THE USER IS NOT NIL") 
      nameLabel.text = self.otherUser!.username ?? "" 
      cityLabel.text = self.otherUser!.cityName ?? "" 
      ratingView.rating = self.otherUser!.rating ?? 0 

     } 

    } 

Я передаю объект MyUser в качестве параметра. В то время, когда я инициализирую этот объект, он не должен быть nil, и он даже пропускает nil-чек и печатает «ПОЛЬЗОВАТЕЛЬ НЕ НЕЛЬ». Однако, когда я принудительно разворачиваю приложение, он падает. Что я могу делать неправильно?

+2

'nameLabel'' cityLabel' или 'ratingView' может быть nil – Paulw11

ответ

1

Вы должны сначала позвонить супер, не получить доступ self, пока это не будет сделано. Вы также можете сократить код и сократить вызовы функций с небольшим изменением в логической проверки:

init(frame: CGRect, otherUser: MyUser?) { 
    super.init(frame: frame) 
    if let otherUser = otherUser { 
     print("THE USER IS NOT NIL") 
     self.otherUser = otherUser 
     nameLabel.text = otherUser.username ?? "" 
     cityLabel.text = otherUser.cityName ?? "" 
     ratingView.rating = otherUser.rating ?? 0 
    } 
} 

Там хороший шанс, что пользователь не является проблемой, так как нет никакого кода для создания этикеток и все, исходящее от NIB еще не готов. Этот метод init также не вызывается, если вы загружались из NIB.

Таким образом, вам, скорее всего, действительно нужно посмотреть метки и другую конфигурацию вида и/или способ, которым вы создаете этот вид. Возможно, вы хотите создать функцию setter (или didSet для свойства), чтобы настроить эти данные.

Смежные вопросы