Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.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 为什么我的模型没有更新?_Ios_Oop_Swift_Model View Controller_Segue - Fatal编程技术网

Ios 为什么我的模型没有更新?

Ios 为什么我的模型没有更新?,ios,oop,swift,model-view-controller,segue,Ios,Oop,Swift,Model View Controller,Segue,首先,我有一个结构。这是我的模型 struct DiscoverySettings { var alert:Bool var distance:Int var minAge: Int var maxAge: Int private init(){ alert = true distance = 50 minAge = 18 maxAge = 100 } } extension UIV

首先,我有一个结构。这是我的模型

struct DiscoverySettings {
    var alert:Bool
    var distance:Int
    var minAge: Int
    var maxAge: Int
    private init(){
        alert = true
        distance = 50
        minAge = 18
        maxAge = 100
    }
}

extension UIViewController{
    var contentViewController: UIViewController{
        if let navcon = self as? UINavigationController{
            return navcon.visibleViewController
        }else{
            return self
        }
    }
}

// View Controller 1
class SettingsViewController: UIViewController {
    let discovery_model = DiscoverySettings()
    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
        if segue.identifier == Constants.EditDiscoverSegue {
            if let dseg = segue.destinationViewController.contentViewController as? DiscoverySettingsViewController {
                dseg.dsettings = discovery_model
            }
        }
    }
    @IBAction func unwindToSettings(segue:UIStoryboardSegue){
        println(discovery_model.minAge)
        println(discovery_model.maxAge)
    }
...

//View Controller 2
class DiscoverySettingsViewController: UIViewController  {

    var dsettings: DiscoverySettings? {
        didSet{
            render()
        }
    }

    func rangeSliderValueChanged(rangeSlider: RangeSlider) {
        println("Range slider value changed: (\(Int(rangeSlider.lowerValue)) , \(Int(rangeSlider.upperValue)))")
        var low = Int(rangeSlider.lowerValue)
        var high = Int(rangeSlider.upperValue)
        dsettings?.minAge = low //this does not set the original model!
        dsettings?.maxAge = high //this does not set the original model!
    }
...

当我拖动滑块,然后单击“保存”以展开到原点序列时,我会打印出最大年龄和最小年龄。然而,他们打印18和100。它们不会打印我在滑块中更改的值。但是,打印语句都可以工作,因此滑块工作正常

啊,结构和类之间有趣的区别。结构按值传递-在每次赋值时创建一个完整副本

另一方面,课程是通过引用传递的——作业上没有副本

在您的情况下,这两个令人不安的任务工作正常,但仅在本地进行,从未影响您的控制器


使用类进行发现设置并查看差异。

注意:如果需要使用结构,则必须通过回调闭包传递新值,以便控制器可以分配,从而将编辑的模型复制到自己的副本中。我将其切换为类,但它仍然显示初始值。在创建模型时,我也将let切换到var。如果在两个赋值处设置断点,那么dsettings为nil吗?我解决了这个问题。结果发现我的识别码都没有设置。