嘿,我的自定义UIView中有一个自定义的init方法,如下所示:
onTaskRemoved(Intent)
我将MyUser对象作为参数传递。当我初始化这个对象不应该是零,它甚至通过零检查并打印“用户不是无”。然而,当我强行解开它时,应用程序崩溃了。我在这里做错了什么?
答案 0 :(得分: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的任何东西都还没有准备好。如果从NIB加载,也不会调用此init
方法。
因此,您很可能真的需要查看标签和其他视图配置和/或实例化此视图的方式。您可能想要创建一个setter函数(或属性上的didSet
)来配置这些细节。