Segue导致模型数据消失

时间:2016-05-20 15:26:29

标签: swift segue cs193p

我试图通过segue将我的模型中的数据从我的文件CalculatorBrain传递给ViewController。我试图传递的var被指定为PropertyList,如下所示:

var program: PropertyList { // guaranteed to be PropertyList

    get {
        return opStack.map { $0.description }
    }

    set {
        if let opSymbols = newValue as? Array<String> {
            var newOpStack = [Op]()
            for opSymbol in opSymbols {
            if let op = knownOps[opSymbol] {
                newOpStack.append(op)
            } else if let operand = NSNumberFormatter().numberFromString(opSymbol)?.doubleValue {
                newOpStack.append(.Operand(operand))
            }
        }
            opStack = newOpStack
        }
    }
}

这是一个多MVC项目,覆盖segue函数位于ViewController中,名为&#34; CalculatorViewController。&#34;该函数尝试将数据从模型传递给ViewController,称为&#34; GraphingViewController&#34;像这样:

    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    var destination: UIViewController? = segue.destinationViewController
    if let navCon = destination as? UINavigationController {
        destination = navCon.visibleViewController
    }

    if let gvc = destination as? GraphingViewController {
            gvc.program = brain.program
    }
}

我在GraphingViewController中设置变量程序,如下所示:

var program: AnyObject?

当我按下调用segue的按钮时,它会触发。会发生什么是brain.program中的数据被复制到gvc.program中。然而,它对模型来说是很难的。我不知道为什么会这样。 当我从segue中的控制器打印出程序时,我确实看到应该显示的程序。但是,当我在segue之后的任何地方打印它时,它已经消失了。

为什么要删除覆盖segue函数后的数据?

编辑:这是GraphingViewController中的委托函数。当我从这里打印出brain.program时,它不会打印出完整的opStack。

  func graphForGraphView(xAxisValue: CGFloat, sender: GraphView) -> CGPoint? {
    print("BRAIN PROGRAM 2: \(brain.program)")
    brain.variableValues[brain.variableM] = 40.0

    if let yValue = brain.returnEvaluate() {
            print(yValue)
            print("The returned value is: \(yValue)")

        let point = CGPoint(x: 40.0, y: CGFloat(yValue))
            if !point.x.isNormal || !point.y.isNormal {
                return nil
            } else {
                return point
            }
    }

    return nil
}

0 个答案:

没有答案