我有一个UICollectionViewCell
. 单元在情节提要中以视觉方式设计,具有许多组件,并且这些组件使用情节提要绑定到 Swift 子类中的变量。
Swift 类只是提供了从数据源检索到的 dat 填充组件的逻辑。
例如:
class InfoCollectionViewCell : UICollectionViewCell {
@IBOutlet weak var mainPanel : UIView!
@IBOutlet weak var panel1 : UIView!
@IBOutlet weak var firstName : UILabel!
@IBOutlet weak var lastName : UILabel!
@IBOutlet weak var address : UILabel!
etc ...
func setVariousProperties(etc) {
firstName.text = ... etc
数据源做通常的事情:
let cell = collectionView.dequeueReusableCellWithReuseIdentifier("InfoCell", forIndexPath:indexPath)
if let c : InfoCollectionViewCell = cell as? InfoCollectionViewCell {
c.setVariousProperties(...)
}
我最初只实现了包含“未实现”断言的解码/编码方法,但很明显框架偶尔会编码和解码类。我在不保存组件的情况下实现了虚拟编码/解码方法,导致在访问组件时出现 nil 值的可预测问题。
所以看来我要么需要对子UICollectionViewCell
类中的所有控件逐一实现编码和解码,要么必须找到更好的方法。
这似乎是在浪费时间,因为我实际上并不需要(我不认为)保存组件的内容,因为它们无论如何都会被子类重用:我将覆盖组件内容将来自数据源的值。
显然,所有控件都在情节提要中定义。我可以在 init 方法中从情节提要中手动按名称获取它们,但这似乎同样乏味,并且使控件和变量的图形链接变得多余。
有没有更好的办法?
我可以说“恢复连接”或类似的话吗?
编辑:
在发布问题和添加赏金之间的某个地方,问题停止发生。我现在注意到我的组件的 encode 方法没有被调用。所以出于某种原因,框架决定序列化我的对象并反序列化它们,但现在不是。因此问题没有发生,我无法提供堆栈跟踪。
可以想象,XCode 的一些更新已经解决了这个问题,或者它可能是其他问题。
我显然仍然担心某处潜伏着一些错误。