首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >外包TableView协议

外包TableView协议
EN

Stack Overflow用户
提问于 2017-08-07 19:20:05
回答 1查看 64关注 0票数 0

我想外包一个tableView的委托和数据源协议。因此,我创建了一个新的TableViewController,为它创建了一个Cocoa Touch Class,并删除了故事板中现有的委托和数据源连接。最后,我以编程方式设置了委托和数据源。到目前为止,它工作得很好,但我有一个问题。请先看一下我的代码。

代码语言:javascript
复制
class TableViewController: UITableViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        let protocols = TableViewProtocols()

        tableView.delegate = protocols
        tableView.dataSource = protocols
    }
}

正如我所说的,它工作得很好,但我试图让它变得更容易,但这并不起作用

代码语言:javascript
复制
class TableViewController: UITableViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        tableView.delegate = TableViewProtocols()
        tableView.dataSource = TableViewProtocols()
    }
}

在第一个示例中,我创建了一个TableViewProtocols对象并将其保存在protocols中。我将其分配给委托和数据源。这是有效的。

在第二个示例中,我没有保存TableViewProtocols的一个实例。相反,我在一行中一步完成了创建和赋值。这是行不通的。我也不知道为什么。因为对我来说它看起来是一样的。首先创建一个对象和直接在一行中创建和赋值有什么不同?

任何建议都会被采纳。谢谢。

EN

回答 1

Stack Overflow用户

发布于 2017-08-08 00:59:19

表视图不维护对其委托或数据源对象的强引用。因此,当您直接设置它们时,调用超出了作用域,对象被删除,表视图不再有委托或数据源。

即使使用表视图控制器,拥有不同的数据源和委托也是完全可以接受的。要做到这一点,一种简单的方法是让表视图控制器具有对您想要委托的对象的引用,并且它具有对该对象的强引用,然后在视图中设置委托和数据源:

类TableViewController: UITableViewController {

var协议= TableViewProtocols() //不是最好的名称,但它就是您所拥有的。

代码语言:javascript
复制
override func viewDidLoad() {
    super.viewDidLoad()

    tableView.delegate = protocols
    tableView.dataSource = protocols
}

}

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45545696

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档