分解过大 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()
}
所以为了打破我的 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
中调用这个 seguefunc 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()
}