Swift iOS - 解除segue崩溃

时间:2015-08-08 07:12:44

标签: ios iphone swift segue unwind-segue

我目前正处理我游戏的某个部分,用户在丢失后将被带到第二个ViewController,这是我的GameOverViewController

我已成功设置第二个视图控制器,其中插页式广告几乎立即在GameOverViewController加载后立即投放,replay按钮仅在插页式广告关闭后才有效。

我的应用程序在按下重播按钮后崩溃,它在我添加延迟之前工作正常,所以我猜这与我的新代码有关。重播按钮正在执行展开segue(或尝试),是否有人能够帮助解决?

class GameOverViewController: UIViewController {

@IBOutlet weak var button: UIButton!

}

override func viewDidLoad() {
super.viewDidLoad()

        self.button.enabled = false
NSTimer.scheduledTimerWithTimeInterval(3, target: self, selector: "enableButton", userInfo: nil, repeats: false)

//lots of code here to bring up google interstitial advert

 }

func enableButton() {
self.button.enabled = true
}

按钮被正确地显示为灰色三秒然后变为蓝色,但是一旦点击,viewController就会挂起然后崩溃。该错误导致AppDelegate出现SIGABRT错误。这是输出字段的摘录...

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[Ginger_Cat.GameOverViewController button:]: unrecognized selector sent to instance 0x7fe70739d120'
*** First throw call stack:
(
0   CoreFoundation                      0x0000000111b4dc65 __exceptionPreprocess + 165
1   libobjc.A.dylib                     0x0000000113b96bb7 objc_exception_throw + 45
2   CoreFoundation                      0x0000000111b550ad -[NSObject(NSObject) doesNotRecognizeSelector:] + 205
3   CoreFoundation                      0x0000000111aab13c ___forwarding___ + 988
4   CoreFoundation                      0x0000000111aaacd8 _CF_forwarding_prep_0 + 120
5   UIKit                               0x00000001128cbd62 -[UIApplication sendAction:to:from:forEvent:] + 75
6   UIKit                               0x00000001129dd50a -[UIControl _sendActionsForEvents:withEvent:] + 467
7   UIKit                               0x00000001129dc8d9 -[UIControl touchesEnded:withEvent:] + 522
8   UIKit                               0x0000000112918958 -[UIWindow _sendTouchesForEvent:] + 735
9   UIKit                               0x0000000112919282 -[UIWindow sendEvent:] + 682
10  UIKit                               0x00000001128df541 -[UIApplication sendEvent:] + 246
11  UIKit                               0x00000001128eccdc _UIApplicationHandleEventFromQueueEvent + 18265
12  UIKit                               0x00000001128c759c _UIApplicationHandleEventQueue + 2066
13  CoreFoundation                      0x0000000111a81431 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 17
14  CoreFoundation                      0x0000000111a772fd __CFRunLoopDoSources0 + 269
15  CoreFoundation                      0x0000000111a76934 __CFRunLoopRun + 868
16  CoreFoundation                      0x0000000111a76366 CFRunLoopRunSpecific + 470
17  GraphicsServices                    0x00000001151d0a3e GSEventRunModal + 161
18  UIKit                               0x00000001128ca8c0 UIApplicationMain + 1282
19  Ginger Cat                          0x000000010f9caa37 main + 135
20  libdyld.dylib                       0x00000001142f0145 start + 1
)
libc++abi.dylib: terminating with uncaught exception of type NSException
(lldb)

以下是我的GameViewController中的代码,目前没有与此ViewController

中的展开相关的其他代码
@IBAction func replay(segue: UIStoryboardSegue) {
}

任何帮助都会很棒,谢谢。

2 个答案:

答案 0 :(得分:3)

来自异常的堆栈跟踪告诉您正在调用button(_:)上的方法GameOverViewController,并且该方法不存在(称为"无法识别的选择器"来自Objective-C的说法。

目前还不清楚您的代码中发生了什么,但我猜测,因为您说点击按钮时发生了崩溃,因此有一个名为button(_:)的无意操作连接到触摸故事板中按钮上的事件。在故事板中选择您的按钮,然后选择右侧的连接检查器。寻找一个名为button:的行动 - 这可能是导致问题的原因。

猜测这是怎么发生的 - 你的replay(_:) unwind segue曾被称为button(_:),然后你重命名了吗?代码中重命名的方法不会在故事板中自动更新,并且由于故事板和代码之间的连接不良而成为错误的常见来源。

答案 1 :(得分:0)

我认为IBAction存在问题。下面的代码可能会有所帮助。

@IBAction func replay(sender: UIButton) {

self.performSegueWithIdentifier("yourunwindidentifername", sender: self)
}