2015-04-07 34 views
0

我的意图是当用户执行一个摇动手势时,从另一个类prepareforsegue中清空2个数组内的值 - force [] & stiffness []。下面是我的代码,然后是我遇到的错误。Swift - Shake Motion做prepareforsegue

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) 

    } 
} 

} 

守则止于此,即使我没有放置代码内的任何断点。我点击继续程序执行。 BreakPoint

代码在这里停止。 Error

+0

请继续执行,直到您收到异常消息。 – Miknash

+0

它在这里崩溃,不能再执行。代码首先包含任何断点。不知道为什么它会停在... –

+0

你试过添加异常断点吗? – Miknash

回答

1

诀窍是创造递归函数去通过视图控制器堆栈:

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 

这引起放慢继续,所以SVC1不是目的地。另一个解决方法可以参考SVC1。