gpt4 book ai didi

ios - dequeueReusableCellWithIdentifier 中的字符串与 NSStringFromClass

转载 作者:可可西里 更新时间:2023-11-01 01:06:29 24 4
gpt4 key购买 nike

它们中的每一个都调用不同的构造函数。

let cell = tableView.dequeueReusableCellWithIdentifier(NSStringFromClass(MessageSentDateCell), forIndexPath: indexPath) as MessageSentDateCell
let cell = tableView.dequeueReusableCellWithIdentifier("MessageSentDateCell", forIndexPath: indexPath) as MessageSentDateCell

热门电话:

override init(style: UITableViewCellStyle, reuseIdentifier: String?)

第二行调用:

required init(coder aDecoder: NSCoder)

但是,在我所指的示例项目存储库中,required init(coder aDecoder: NSCoder) 并未真正实现。所以我想调用第一个构造函数。知道为什么第二行不调用第一个构造函数吗?

是的,类名和标识符是一样的。

最佳答案

如果您将单元设置为 Storyboard中的原型(prototype)单元,那么应该调用 initCoder 初始化器。这是因为您的单元格已被编码到 Storyboard文件中,并且是通过反序列化创建的。 initStyle:reuseIdentifier: 用于按比例生成的单元格。

这两个调用产生不同结果的原因是 NSStringFromClass 没有像您预期的那样返回“MessageSentDataCell”。 Swift 类被分解以包含它们的模块名称和其他信息,这样您就可以在不同的模块中存在多个相同的类。

由于出队没有失败,您必须使用相同的 NSStringFromClass 方法将 MessageSentDateCell 类注册到独立于协议(protocol)的 TableView 。

您应该选择以编程方式加载您的单元格并删除 Storyboard 中的原型(prototype),或者坚持使用 Storyboard 。如果您必须对原型(prototype)单元进行额外设置,则应在单元子类的 awakeFromNib 方法中进行设置,因为一旦所有 socket 都已连接,该方法就会被调用。

关于ios - dequeueReusableCellWithIdentifier 中的字符串与 NSStringFromClass,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27595374/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com