2016-04-13 4 views
0

これは私が抱えていた問題です。問題を解決するために何かを見つけることができませんでした。基本的に私は何が起こっている、イベントのシナリオを作成すると、私のCreateEventViewControllerで切り替えると仮定されているUISwitchを持って、それは、私のSetCountdownViewControllerですが、その設定のビューコントローラを起動するが、私はしたいSetCountdownViewControllerにキャンセルボタンを設定して、SetCountdownViewControllerを終了し、私のUISwitchをオフに切り替えることができますが、これまでにいくつかのエラーやバグがありました。UISwitch状態を設定し、View Controllerを起動し、キャンセルを押してスイッチをオフにする方法

私はいくつかのチュートリアルを見て、彼らはすべてのsomeSwitch.on

someSwitch.setOn([state, true/false], animated:[true/false])を使用するように私に言ったとの両方が最初に働くよう、エラーがポップアップしていない、私は、ビルドして実行することができますが、私はテストするために行くときに私私のキャンセルボタンを機能と押して、それが「スレッド1:EXC_BAD_INSTRUCTION(コード= EXC_i386_INVOP、サブコード= 0x0の)」と言って私にエラーを与える「countdownSetSwitch.setOn(アニメーション、偽:真) 」という行に

を私のログの中に「致命的なエラー:予期せぬことにnilが見つかりました。

私はそれをfalseにリセットするはずの関数を持っていますが、エラーが発生している場所でも、どこに置いても.setOnまたは.onにすると、このエラーが出ます。廃止されるかもしれませんが、実際に呼び出されるまでビルド/ランニングのために何らかの形で機能します。私の機能のthats

func resetCountdownSwitch(){ countdownSetSwitch.setOn(false, animated: true) }

私はキャンセルボタンを私のIBActionでここに呼び出しています。

@IBAction func countdownCancelButton(sender: AnyObject) { 


    createEventVC.resetCountdownSwitch() 
    dismissViewControllerAnimated(true, completion: nil) 
} 

任意のヘルプは素晴らしいだろうあなたはより多くの情報idはそれを与えるために幸せになる必要がある場合、私は、スウィフトにかなり新たなんだ、とiOSの開発全体として、それは新人の間違いかもしれので、私は」 m切った。

+0

これは間違いなく推奨されていません。この関数をどこで呼びますか?どのViewControllerがスイッチを所有していますか?これを呼び出すと、どの状態ですか? – Dare

+0

私はキャンセルボタンのIBAction内でこの関数を呼び出していますが、CreateEventViewControllerはスイッチを所有していて、デフォルトではoffの位置に設定されていますが、状態が変更されたときにSetCountdownViewControllerを呼び出すように設定しています。 @Dare – GabrielMSC

+0

これが起こる方法を教えてください。 SetCountdownViewControllerを表示してCreateEventViewControllerの状態を変更しようとすると、これを実行してnilで関数を呼び出すときに、インスタンスがすでに割り当て解除されている可能性があります。 – Dare

答えて

1

(他のビューコントローラが提示されているため)ビューコントローラが参照できなくなった後も、ビューコントローラの参照を維持することで、ビューコントローラとそのサブビューが割り当て解除されないことは保証されません。ビューライフサイクルの仕組みについては、this referenceを参照してください。

可能なことは、CreateEventViewControllerのviewWillAppearメソッドで必要な状態をチェックし、そこにスイッチの値を設定することです。まだ表示されていないので、アニメーションする必要はありません。フリップを実際にアニメーション化したい場合は、コードを追加して状態を確認し、代わりにviewDidAppearのボタンを設定してください。

あなたのクラッシュは、resetCountdownSwitch()を呼び出すときにcreateEventVCのサブビューが存在しなくなったためであり、countdownSetSwitch.setOnを呼び出すと、実際にはnilで関数を呼び出している可能性があります。

関連する問題