Swift - 摇动动作来做 prepareforsegue

Swift - Shake Motion to do prepareforsegue

我的意图是在用户执行摇动手势时清空 2 个数组中的值 - force[] 和 stiffness[],来自 prepareforsegue 的另一个 class。下面是我的代码,然后是我遇到的错误。

springViewController1

var springNum : NSInteger = 0

class springViewController1 : UITableViewController, UITableViewDataSource {
var force = [Float]()
var stiffness = [Float] ()
}

springViewController2

class springViewController2 : UITableViewController , UITableViewDelegate, UITableViewDataSource {
var forceView2 = [Float]()
var stiffView2 = [Float]()

override func canBecomeFirstResponder() -> Bool {
        return true
    }

override func motionEnded(motion: UIEventSubtype, withEvent event: UIEvent) {
    if(event.subtype == UIEventSubtype.MotionShake){

       println("Shaken")
       self.performSegueWithIdentifier("reset", sender: self)
    }
}

      override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) {

      if(segue.identifier == "reset") {

        var svcSpringControl1 = segue.destinationViewController as springViewController1

        springNum = 0

        svcSpringControl1.force.removeAll(keepCapacity: true)
        svcSpringControl1.stiffness.removeAll(keepCapacity: true)

    }
}

}

代码到此为止,尽管我没有在代码中放置任何断点。我单击继续执行程序。

代码到此为止。

诀窍是创建递归函数来遍历视图控制器堆栈:

func getSVC1FromVCStack(vc:UIViewController) -> springViewController1{
        if(vc.isKindOfClass(springViewController1)){
            return vc as springViewController1;
        }
        else if(vc.parentViewController == nil){
            return springViewController1.alloc()
        }
        else {
            return getSVC1FromVCStack(vc)
        }

    }

而不是

var svcSpringControl1 = segue.destinationViewController as springViewController1

应该是

var svcSpringControl1 = self.getSVC1FromVCStack(self.parentViewController!) as springViewController1

这是由 unwind segue 引起的,因此 SVC1 不是目的地。另一个解决方法可以参考 SVC1。