分解过大 class,现在出现 segue 错误 [swift]

Broke up over sized class, now getting segue error [swift]

所以为了打破我的 4000 行 View Controller class,我决定再做一个 class。
这是我在新 swift 文件中创建的单独 class:

import Foundation
import UIKit

class NewClass {

var vc = ViewController()

    func switcher1test() {
        switch numberSwitchCase1 {
        case 0:
            println("stuff goes here")
        default:
            vc.callToSegue()
        break
    }
  }
}

这个 switch case 函数,在我原来的 class 中,运行良好(当然没有 vc。)
这是我原来的 class.

中现在调用它的地方
func switcher1() {
    var newClass = NewClass()
    newClass.switcher1test()
}

当 switch case 函数被放置在这里时(在原来的 class 中,显然没有调用新的 class),一切正常。

callToSegue() 在我原来的 class

中调用这个 segue
func callToSegue() {
    self.performSegueWithIdentifier("UnwindSegue", sender: self)
}

这是错误发生的地方。这是错误。

2015-03-20 00:58:20.342 MYAPP[7451:181575] *** Terminating app     due to uncaught exception 'NSInvalidArgumentException', reason: 'Receiver (<MYAPP.ViewController: 0x7c8f8400>) has no segue with identifier 'UnwindSegue''

现在我知道标识符连接正确了,因为就像我说的,在我移动我的开关盒之前,它工作正常,当我把我的开关盒放回去进行测试时,它仍然工作。

只有当我将它放在单独的 class 中时,我才会遇到此崩溃。

澄清一下,switch case 函数在新的 class 中可以正常工作,只有当我点击 callToSegue() performSegueWithIdentifier 时,它位于原来的 class,我会崩溃吗?

有人知道为什么会这样吗?

谢谢!

用这条线

var vc = ViewController()

您创建了一个 viewController 的新实例,这可能不是您想要的。

创建协议并让您的 viewController 成为您的 NewClass:

的代表
protocol SegueProtocol {
    func callToSegue()
}

ViewController类必须符合该协议

class MyViewController: SegueProtocol {
    ...
    func callToSegue() {
        ...
    }
}

NewClass 获得 MyViewController:

的委托
class NewClass {
    ...
    var delegate: SegueProtocol?

    func switcher1test() {
        switch numberSwitchCase1 {
        case 0:
            println("stuff goes here")
        default:
            // call the delegate
            self.delegate?.callToSegue()
        break
    }
  }
}

实例化 NewClass 时(在 MyViewController 中),将 ViewController 设置为委托:

func switcher1() {
    var newClass = NewClass()
    newClass.delegate = self   // self is the viewController here
    newClass.switcher1test()
}