Swift UITableView或UILabel在使用委托和协议观察者方法时发现为NIL,因为它是在viewDidLoad之前调用的
我有一个名为APIController的类,我在其中保存所有网络功能并将响应保存在.plist文件中,我有LogInView和HomePageView,在LogInView中,当用户按下login按钮时,我调用一些功能,当用户数据成功接收时,应用程序进入主页,虽然更多的功能仍在后台运行,通过全局dispatchQueue下载更多与用户相关的数据,但现在在主页中,当数据下载完成时,我需要某种形式的观察者或通知,以便更新UI,我尝试了协议,但当我尝试更新UI时,我总是将所有UI设置为NIL,UITableview,UITextView,一切为零 经过研究,我发现这是因为它在viewdiload之前被调用,并且知道如何解决它?Swift UITableView或UILabel在使用委托和协议观察者方法时发现为NIL,因为它是在viewDidLoad之前调用的,swift,xcode,Swift,Xcode,我有一个名为APIController的类,我在其中保存所有网络功能并将响应保存在.plist文件中,我有LogInView和HomePageView,在LogInView中,当用户按下login按钮时,我调用一些功能,当用户数据成功接收时,应用程序进入主页,虽然更多的功能仍在后台运行,通过全局dispatchQueue下载更多与用户相关的数据,但现在在主页中,当数据下载完成时,我需要某种形式的观察者或通知,以便更新UI,我尝试了协议,但当我尝试更新UI时,我总是将所有UI设置为NIL,UITa
class HomePageViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
let apiController = APIController()
override func viewDidLoad() {
super.viewDidLoad()
apiController.homePageDelegate = self
homeRosterTable.delegate = self
homeRosterTable.dataSource = self
homeRosterTable.register(UINib(nibName: "RosterCell", bundle: nil), forCellReuseIdentifier: "customRosterCell")
}
}
extension HomePageViewController: HomePageDelegate {
func readyToLoadData() {
apiController.loadRoster { (roaster) in
DispatchQueue.global(qos: .background).async {
self.flightList = roaster
// if self.nextDepFrom != nil {
self.nextDepFrom?.text = "MOZ"
DispatchQueue.main.async {
self.homeRosterTable.reloadData()
}
//}
}
}
}
}
protocol LogInDelegate {
func logInObserver(success: Bool, msg: String)
}
protocol HomePageDelegate {
func readyToLoadData()
}
class APIController {
var logInPage : LogInViewController?
var logInDelegate : LogInDelegate?
var homePageDelegate : HomePageDelegate?
}
线程1:致命错误:隐式展开可选值时意外发现nil
Mahmoud,据我所知,您的问题是您在LoginViewController和HomeViewController中声明了ApiController实例,并且这两个对象具有不同的引用。您必须将相同的apiController引用传递给LoginViewController中使用的homeViewController 再次检查您的插座是否正确连接。并确保在调用
viewDidLoad
之前不会调用此命令。(如果是这样的话,你可以做self.homeRosterTable?.reloadData()
)是的,我做了一些研究,现在我确定这是因为它在viewdidLoad之前被调用了,但我不知道如何解决它@rob就像我说的,添加可选的链接?
,如上图所示,self.homeRosterTable?.reloadData()
。当我这样做的时候,它从不重新加载@Rob