1

私は現在、ユーザーがViewController負けるとすぐにユーザーが取られるゲームのセクションに取り組んでいます。これは私のGameOverViewController.

2 番目のビュー コントローラーのセットアップに成功しました。インタースティシャル広告GameOverViewControllerが読み込まれるとほぼ瞬時に実行されreplayます。ボタンは、インタースティシャル広告が閉じられるとアクティブになります。

リプレイ ボタンが押されるとアプリがクラッシュします。遅延を追加する前は問題なく動作していたので、新しいコードに関係があると推測しています。リプレイ ボタンがアンワインド セグエを実行している (またはしようとしている) 場合、解決を手伝ってくれる人はいますか?

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
}

ボタンは 3 秒間正しくグレー表示されてから青色に変わりますが、クリックすると viewController がハングしてクラッシュします。エラーは、SIGABRT エラーで AppDelegate を起動します。これは出力フィールドからの抜粋です...

*** 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) {
}

どんな助けでも素晴らしいでしょう、ありがとう。

4

2 に答える 2

3

button(_:)例外からのスタック トレースは、 でメソッドを呼び出していることGameOverViewController、およびそのメソッドが存在しないことを示しています (Objective-C 用語の「認識されないセレクター」として知られています)。

これがコードのどこで発生しているのかはすぐにはわかりませんが、ボタンをタップするとクラッシュが発生すると言うのでbutton(_:)、ストーリーボードのボタンのタッチイベントに接続されたという意図しないアクションがあると推測しています。ストーリーボードでボタンを選択し、右側の接続インスペクターを選択します。button:問題の原因である可能性がある - というアクションを探します。

これがどのように起こったのかについての推測として -replay(_:)アンワインド セグエは以前は と呼ばれていましたがbutton(_:)、名前を変更しましたか? コード内の名前が変更されたメソッドは、ストーリーボードで自動的に更新されず、ストーリーボードとコードの間の接続不良によるバグの一般的な原因になる可能性があります。

于 2015-08-08T07:31:50.910 に答える
0

IBAction に問題があると思います。以下のコードが役立つ場合があります。

@IBAction func replay(sender: UIButton) {

self.performSegueWithIdentifier("yourunwindidentifername", sender: self)
}
于 2015-08-08T07:33:02.807 に答える