嵌入式动态 UITableView 未加载数据



我在静态单元格中嵌入了一个动态UITableView。

我还根据这个问题的答案创建了一个新的数据源:Swift:Static UITableViewCell 中的 TableView

我的问题是动态UITableView的数据没有加载。你能帮我理解为什么吗?

class CreateCompanyTableViewController: UITableViewController {
@IBOutlet weak var lblNumberOfUser: UILabel!
var newStakeholders: [ReadOrganizationStakeholder] = []

@IBOutlet weak var companyUsersTableView: UITableView!

override func viewDidLoad() {
let dataSource = NewUserDataSource(newStakeholders: self.newStakeholders)
super.viewDidLoad()
lblNumberOfUser.text = "(newStakeholders.count) Users"
companyUsersTableView.dataSource = dataSource
companyUsersTableView.delegate = dataSource
companyUsersTableView.reloadData()
}

override func viewDidAppear(_ animated: Bool) {
lblNumberOfUser.text = "(newStakeholders.count) Users"
}

@IBAction func addNewUser(_ sender: Any) {
performSegue(withIdentifier: "segueAddNewUsers", sender: sender)
}

@IBAction func unwindFromSelectSubUsertoAddUserCompany(_ sender: UIStoryboardSegue){
if  let senderVC = sender.source as? NewUserForCompanyTableViewController{
print(senderVC.newStakeholder!)
var newuser = senderVC.newStakeholder!
self.newStakeholders.append(newuser)
companyUsersTableView.reloadData()
}
}
}

class NewUserDataSource: NSObject, UITableViewDataSource ,UITableViewDelegate{
// We keep this public and mutable, to enable our data
// source to be updated as new data comes in.
var newStakeholders: [ReadOrganizationStakeholder]

init(newStakeholders: [ReadOrganizationStakeholder]) {
self.newStakeholders = newStakeholders
}

func tableView(_ tableView: UITableView,
numberOfRowsInSection section: Int) -> Int {
return newStakeholders.count
}

func tableView(_ tableView: UITableView,
cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let stakeholders = newStakeholders[indexPath.row]
let cell = tableView.dequeueReusableCell(
withIdentifier: "newUserTableViewCell",
for: indexPath
) as! NewUserTableViewCell

cell.lblUsername.text  = stakeholders.fullName
cell.lblEmail.text = stakeholders.emailAddress

return cell
}
}

UITableViewdataSourcedelegate属性对您在 viewDidLoad 中初始化的NewUserDataSource具有弱引用。

由于初始化的NewUserDataSource在完成后viewDidLoad任何地方都没有强引用,因此 UITableView 的dataSourcedelegate设置为 nil,因为它们是弱引用,不会将NewUserDataSource保留在内存中。

若要解决此问题,请创建一个类型为NewUserDataSource的类属性,该属性将保存对数据源的强引用。

大致如下:

class CreateCompanyTableViewController: UITableViewController {
private lazy var dataSource = NewUserDataSource(newStakeholders: self.newStakeholders)
}

在使用dataSource之前,只需确保self.newStakeholders其中包含值

即可

最新更新