EXC_BAD_ACCESS UITable在numberOfRowsInSection中设置tableHeaderView

时间:2017-05-16 01:19:08

标签: ios swift uitableview exc-bad-access

我试图在tableHeaderView中设置numberOfRowsInSection。但是我在输出控制台中没有收到EXC_BAD_ACCESS消息。

以下是我的numberOfRowsInSection功能。

// number of rows in table view
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    //SECTION 1
    if self.titles.count == 0 {
        self.noBookmarkView.alpha = 1.0
    }
    else {
        self.noBookmarkView.alpha = 0.0
    }
    //=====================================

    //SECTION 2
    if self.idsb.count != self.ids.count {
        self.bookmarkTableView.tableHeaderView = self.filteredView
    }
    else {
        self.bookmarkTableView.tableHeaderView = nil
    }
    //=====================================

    return self.titles.count
}

以下是我viewDidLoad我初始化filteredView

的地方
@IBOutlet weak var noBookmarkView: UIView!
var filteredView: UIView!

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.

    filteredView = UIView.init(frame: CGRect.init(x: 0, y: 0, width: bookmarkTableView.frame.width, height: 25))
    filteredView.backgroundColor = UIColor.init(red: 0.4, green: 0.4, blue: 0.71, alpha: 1.0)
    let label: UILabel = UILabel.init(frame: filteredView.frame)
    label.text = "Filtered"
    label.font = UIFont.init(name: "System", size: 14.0)
    label.adjustsFontSizeToFitWidth = true
    filteredView.addSubview(label)
}

所以在我添加filteredView之前,它与noBookmarkView完美配合。

现在EXC_BAD_ACCESS上出现错误self.noBookmarkView.alpha = 0.0。如果我发表评论SECTION 2,它可以正常运行。如果我发表评论SECTION 1,则EXC_BAD_ACCESS就行self.bookmarkTableView.tableHeaderView = nil

我不明白为什么self.noBookmarkView.alpha = 0.0出现SECTION 2时导致问题的原因会失败。

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

您应该通过dataSource

UITableView提供标题
func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
    return self.filteredView
}

func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
    return 25
}