gpt4 book ai didi

ios - Swift 中的自定义 UITableViewCell 委托(delegate)模式

转载 作者:搜寻专家 更新时间:2023-11-01 05:48:14 24 4
gpt4 key购买 nike

我在 Swift + Objective-C 问题中遇到了一个奇怪的问题。

我正在快速实现一个 UITableView 和一个带有委托(delegate)的自定义单元格,但是一旦我的 UITableViewController 将我的单元格委托(delegate)分配给自己,它就会让我的应用程序和 Xcode 崩溃。是的,每次我的应用程序崩溃时,Xcode 也会崩溃,无论如何,但这是另一个问题。

这是我手机的一部分

enum NewsCellActionType: Int {  
case Vote = 0
case Comments
case Time
}

protocol NewsCellDelegate {
func newsCellDidSelectButton(cell: NewsCell, actionType: NewsCellActionType)
}

class NewsCell: UITableViewCell {



var cellDelegate: NewsCellDelegate?

func selectedAction(action: NewsCellActionType) {
self.cellDelegate?.newsCellDidSelectButton(self, actionType: action)
}
}

这是我在 UIViewController 中设置委托(delegate)的地方

 override func tableView(tableView: UITableView!, cellForRowAtIndexPath indexPath: NSIndexPath!) -> UITableViewCell! {
var cell = tableView.dequeueReusableCellWithIdentifier(NewsCellsId) as NewsCell
if cell == nil {
cell = NewsCell(style: UITableViewCellStyle.Default, reuseIdentifier: NewsCellsId)
}
cell.post = self.posts[indexPath.row] as HNPost
cell.cellDelegate = self
return cell

}

它在 cell.cellDelegate = self 行崩溃,我不知道为什么。是当前DP的bug,还是我做错了?

我尝试在我的委托(delegate) var 上使用 weak + 协议(protocol)上的 @objc 标记,但是因为我使用纯 Swift 枚举,所以我不能这样做。但我需要它吗?

谢谢!

最佳答案

我需要进行两处更改才能使您的代码正常工作

<德尔>1。在 tableView.dequeueReusableCellWithIdentifier

之后将 as 替换为 as?

(有关详细信息,请参阅 UITableView in Swift)

不需要第一个更改,因为单元格不能为 nil( Storyboard 确保它)。我构建的代码有误。

2。将 @class_protocol 添加到 NewsCellDelegate

@class_protocol protocol NewsCellDelegate {

我不太确定为什么没有它应用程序会崩溃,我认为这是一个错误。但是,无论如何都应该使用 @class_protocol,因为我们应该将 cellDelegate 声明为 weak 并且没有 @class_protocol 我们可以去做吧。

weak var cellDelegate: NewsCellDelegate?

不幸的是,添加 weak 会使应用在使用委托(delegate)时崩溃。

您的代码中存在大量内存泄漏,从使用 ARC 编写但设置为 MRC 的库开始。

您在 NewsCell 中的闭包正在捕获 self,创建保留循环(以及随后的泄漏单元格)。

我无法找到崩溃的原因,但我很确定这是编译器/运行时中的错误,因为它不仅使应用程序崩溃,而且使 Xcode 崩溃,甚至有 3 次使我的系统崩溃。

关于ios - Swift 中的自定义 UITableViewCell 委托(delegate)模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24137090/

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