私が取り組んでいるプロジェクトでは、iOS アプリのあちこちにポップアップを表示する UIAlert ヘルパー モジュールを作成する必要がありました。ポップアップは、コード内の任意の場所で簡単に呼び出すことができるクラス関数として記述されています (クラスは静的であり、すべての関数もそうです)。
アラートを一度閉じてからもう一度開くと、そのアクションが機能しなくなるという非常に奇妙なバグに遭遇しました(アクションハンドラーが呼び出されないなど)。ただし、ポップアップが最初に表示されたときにアクションをクリックすると機能します...
このバグが発生する特定のポップアップのコードは次のとおりです (他のポップアップはまったく影響を受けません)。
static func popSkipWalkthrough() {
let alert = UIAlertController(title: "Skip", message: "whatever", preferredStyle: .Alert)
alert.addAction(cancelAction)
alert.addAction(skipWalkthroughAction)
appDelegate.window!.rootViewController!.presentViewController(alert, animated: true, completion: nil)
}
は次のskipWalkthroughAction
ように定義されます。
static let skipWalkthroughAction = UIAlertAction(title: "Continue", style: .Default, handler: { (action: UIAlertAction!) -> Void in
appDelegate.setWindowViewTo("NavCtrl", navigateTo: false)
CallIn.Settings.didWalkthrough = true
})
は次のcancelAction
ように定義されます。
static let cancelAction = UIAlertAction(title: "Cancel", style: .Cancel, handler: nil)
特にこのポップアップは、ウォークスルーの最後のステップで「スキップ」ボタンを押すたびに表示されます...
この動作の原因についていくつかのリードを試してみましたが、実際には割り当てが解除されていないポップアップと関係があるのではないかと思いますが、現時点ではまったくわかりません...
何か案は ?