gpt4 book ai didi

ios - 传递参数时,ViewController 的变量值由前向 ViewController 更改

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

我的问题有点困惑。我有一个向用户显示一些属性的 ViewController,这些属性在字典中。为了编辑这些属性,我有另一个 ViewController,当我“继续”到它时,我以默认方式传递属性,如下所示:

viewController.value = self.value

在第二个 ViewController(版本的 View Controller )上,我有返回 ViewController 和保存更改的选项,因此,我可以在不保存或保存的情况下更改值。当我更改值而不保存时,只是返回到 View Controller ,值在以前的 View Controller 中被更改。我不明白这是怎么发生的。我会尝试用图像展示。

我的第一个 View Controller 是:ViewContollerSale.swift

我的第二个(编辑) View Controller 是:ViewControllerCreateSale.swift

ViewControllerSale.swift

var saleOrder : SaleOrder?  // at this point it's populated


override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
print("===> VcSale: prepare")
if segue.identifier == "segueEditOrder" {
print("segue: segueEditOrder")
let editVc = segue.destination as! ViewControllerCreateSale
editVc.saleToEdit = true
if saleOrder != nil {
editVc.sale = saleOrder!
}
}
}

ViewControllerCreateSale.swift

设置值的函数如下所示。但我认为这只会改变 ViewControllerCreateSale.swift 的实例上下文的值,但是当我返回 View Controller 时,该值也会在前一个 View Controller 上发生变化!

var sale: SaleOrder = SaleOrder()

case Notification.Name.opEntrega:
aux = notf.object as! String
sale.attributes["delivery_term_id"] = aux == "CIF" ? Int32(1) : Int32(2)
let cell = tableOptionsSelect.cellForRow(at: IndexPath(row: 3, section: 0)) as! CellSelectionCreateSale
cell.lblOptionSelect.text = aux
break

enter image description here

enter image description here

enter image description here

enter image description here

最佳答案

当您将 SaleOrder 分配给第二个 View Controller 时,您传递的是对 SaleOrder 的引用而不是副本。

这意味着无论何时您在第二个屏幕上更新 SaleOrder,您都会更新第一个屏幕使用的相同 SaleOrder。

我认为只需在第一个屏幕中将其更改为 let 而不是 var 即可解决此问题。您也可以尝试使用 saleOrder!.copy() 传递对象的副本而不是引用,但我认为您的 SaleOrder 类需要符合 NSCopying 协议(protocol)。

如果您想了解有关引用类型的更多信息,您可以阅读本主题 Is Swift Pass By Value or Pass By Reference

关于ios - 传递参数时,ViewController 的变量值由前向 ViewController 更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51769139/

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