Swift iOS - 展开 segue 崩溃
Swift iOS - unwind segue crashing
我目前正在开发我的游戏的一部分,用户输了之后会被带到第二个 ViewController
,这是我的 GameOverViewController
。
我已经成功地设置了第二个带有插页式广告的视图控制器,该广告在 GameOverViewController
加载后几乎立即运行,replay
按钮仅在插页式广告加载后才处于活动状态已关闭。
我的应用程序在按下重播按钮后崩溃,在我添加延迟之前它运行良好,所以我猜这与我的新代码有关。重播按钮正在执行一个 unwind 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) {
}
任何帮助都将是很好的,谢谢。
异常的堆栈跟踪告诉您您正在 GameOverViewController
上调用方法 button(_:)
,但该方法不存在(称为 "unrecognized selector" 来自 Objective-C说法)。
目前还不清楚这在您的代码中发生的位置,但我猜测由于您说当您点击按钮时会发生崩溃,所以有一个名为 button(_:)
的无意操作连接到故事板中按钮上的触摸事件。 Select 你在情节提要中的按钮,然后选择右侧的连接检查器。查找名为 button:
的操作 - 这可能是问题的原因。
猜测这是怎么发生的 - 你的 replay(_:)
unwind segue 曾经被称为 button(_:)
,然后你重命名了吗?代码中重命名的方法不会在情节提要中自动更新,并且由于情节提要和代码之间的连接不良,可能成为错误的常见来源。
我认为您的 IBAction 有问题。下面的代码可能会有帮助。
@IBAction func replay(sender: UIButton) {
self.performSegueWithIdentifier("yourunwindidentifername", sender: self)
}
我目前正在开发我的游戏的一部分,用户输了之后会被带到第二个 ViewController
,这是我的 GameOverViewController
。
我已经成功地设置了第二个带有插页式广告的视图控制器,该广告在 GameOverViewController
加载后几乎立即运行,replay
按钮仅在插页式广告加载后才处于活动状态已关闭。
我的应用程序在按下重播按钮后崩溃,在我添加延迟之前它运行良好,所以我猜这与我的新代码有关。重播按钮正在执行一个 unwind 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) {
}
任何帮助都将是很好的,谢谢。
异常的堆栈跟踪告诉您您正在 GameOverViewController
上调用方法 button(_:)
,但该方法不存在(称为 "unrecognized selector" 来自 Objective-C说法)。
目前还不清楚这在您的代码中发生的位置,但我猜测由于您说当您点击按钮时会发生崩溃,所以有一个名为 button(_:)
的无意操作连接到故事板中按钮上的触摸事件。 Select 你在情节提要中的按钮,然后选择右侧的连接检查器。查找名为 button:
的操作 - 这可能是问题的原因。
猜测这是怎么发生的 - 你的 replay(_:)
unwind segue 曾经被称为 button(_:)
,然后你重命名了吗?代码中重命名的方法不会在情节提要中自动更新,并且由于情节提要和代码之间的连接不良,可能成为错误的常见来源。
我认为您的 IBAction 有问题。下面的代码可能会有帮助。
@IBAction func replay(sender: UIButton) {
self.performSegueWithIdentifier("yourunwindidentifername", sender: self)
}