繁体   English   中英

从模型中删除NSObject

[英]Delete NSObject from model

我已经在Swift中创建了一个名为infoModel的文件。 这用于将信息从一个ViewController传递到另一个ViewController,并将信息写在标签中。 这可以正常工作,但是我希望能够删除该信息,或者至少将其从标签中删除。

我尝试设置label = nil,但是当我更改为其他viewController并返回时,信息会弹出。

我应该如何删除数据?

代码信息模型:

import UIKit

class infoModel: NSObject {
    var info: String = ""
    var info2: String = ""
    var info3: String = ""
    var info4: String = ""

    func currentInfo() -> String {
        //return a string with the current info
        return info + "" + info2 + "" + info3 + "" + info4 + ""
    }    
}

在视图控制器中:

class collectViewController: UIViewController {
    var myInfo = infoModel()

    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        infoLabel.text = myInfo.currentInfo()
    }
}

这是我要删除的infoLabel。

*编辑:该应用正在收集用户的信息。 这样做的方式仅仅是用户按下一个/某些按钮,该按钮代表该特定用户的合适值。 然后,该信息将显示在其他View Controller中。 如果用户按下错误的按钮,我希望他们能够删除/删除信息并重新开始。 removebutton与infoLabel在同一View控制器中。 当所有信息正确时,用户然后按下另一个写入Firebase数据库的按钮。

因此,我的目标是使用户能够删除/删除信息并重新开始。

不要将初始值设置为myInfo ,使其成为可选值:

 var myInfo: infoModel?

infoLabel.text = myInfo?.currentInfo()

现在,如果没有模型,将不会设置任何内容。

另外,您可以使用以下方法自动更新标签:

var myInfo: infoModel? {
   didSet {
      _ = self.view // load the view if not loaded
      infoLabel.text = myInfo?.currentInfo()
   }
}

现在只需设置myInfo = nil清除标签。

您需要将模型用作数据和更改的容器。 当用户按下各种按钮时,您需要更新模型,而当用户单击删除按钮时,您需要更新模型以反映该状态。

无需将整个对象设置为nil,而是将内部变量设置为nil,这样模型对象将始终存在。 您将需要做更多的包装。

var info: String? = nil
var info2: String? = nil
var info3: String? = nil
var info4: String? = nil

如果您不想这样做,则需要检查模型的可为空性,并在模型为零时创建一个新模型(如Sultan在另一个答复中所述)。

(我也建议您使用结构而不是类)

然后,当模型更新时,您需要重新绘制UI。 我认为在您的简单情况下,即使在控制器视图上运行setNeedsDisplay也可以解决问题

实际上,通过执行以下操作,我无法将数据重新添加到标签中,从而解决了该问题:

 myInfo?.info = ""
 myInfo?.info2 = ""
 myInfo?.info3 = ""
 myInfo?.info4 = ""

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM