Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/94.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios swift 3.0中使用的块未调用Denit_Ios_Swift_Deinit - Fatal编程技术网

Ios swift 3.0中使用的块未调用Denit

Ios swift 3.0中使用的块未调用Denit,ios,swift,deinit,Ios,Swift,Deinit,我在单元格中使用了块来获取开关值,但现在我的问题是在我使用块的地方没有调用Denit。它以前完全工作,但在swift 3.0中不工作 我的开关单元: 这个细胞的用途 另外,如果我对这两个块进行注释,则将调用我的deinit。听起来您是在通过在块内强烈引用视图控制器来创建保留循环。相反,您应该创建一个要使用的vc的弱引用。这是我喜欢的方法 cell?.blockBtn_Clicked = { [weak self] print("button clicked") self?.vie

我在单元格中使用了块来获取开关值,但现在我的问题是在我使用块的地方没有调用Denit。它以前完全工作,但在swift 3.0中不工作

我的开关单元:

这个细胞的用途


另外,如果我对这两个块进行注释,则将调用我的deinit。

听起来您是在通过在块内强烈引用视图控制器来创建保留循环。相反,您应该创建一个要使用的vc的弱引用。这是我喜欢的方法

cell?.blockBtn_Clicked = { [weak self]
    print("button clicked")
    self?.viewModel.//do something
}
cell?.blockSwitch_Change = { [weak self] (isOn) in
    print("switch value changed \(isOn)")
    self?.viewModel.//do something
}

[weake self]部分将把self的弱引用传递到块中,不过请注意,该引用现在是可选的。然后,您可以使用可选的链接或在此之后将其展开。

尝试将它们都设置为
引用。这些打印语句是否总是位于块内,而您在看到问题时实际使用的代码?@AidanMalone否我无法共享实际代码这就是我临时打印的原因statement@RakeshaShastri它是可以提供代码吗?好的,块内的代码是否引用单元格本身?作为替代,您也可以使用[unowned self]。这也将创建一个弱引用,但它不是可选的(它将在传递到块之前隐式展开)。如果您的应用程序通常比较安全,因为它可以防止潜在的崩溃,但值得考虑的是,在调用此块且视图控制器已从内存中删除的情况下,您可能不希望应用程序继续执行。
let cell = tableView.dequeueReusableCell(withIdentifier: CellSwitch.identifier) as? CellSwitch
                cell?.lblTitle.textColor = Color.custom(hexString: objModel.titleLblColor, alpha: 1.0).value
                cell?.lblTitle.text = objModel.strTitle
                cell?.objSwitch.isOn = objModel.isOn
                cell?.btnInfo.isHidden = !objModel.isInfoBtn
                cell?.blockBtn_Clicked = { 
                   print("button clicked")
                }
                cell?.blockSwitch_Change = { (isOn) in
                    print("switch value changed \(isOn)")
                }
                if objModel.isEnable == false
                {
                    cell?.isUserInteractionEnabled = false
                    cell?.contentView.alpha = 0.5
                }
                else
                {
                    cell?.isUserInteractionEnabled = true
                    cell?.contentView.alpha = 1.0
                }
                return cell!
cell?.blockBtn_Clicked = { [weak self]
    print("button clicked")
    self?.viewModel.//do something
}
cell?.blockSwitch_Change = { [weak self] (isOn) in
    print("switch value changed \(isOn)")
    self?.viewModel.//do something
}