ビューコントローラのMy viewDidLoad
が2回呼び出されました。 1回目は[UIViewController View]
、2回目は[UINib instanciateWithOwner:Options]
である。なぜこうなった?それは防ぐことができますか?viewDidLoadが2回呼び出されました
おかげ
ビューコントローラのMy viewDidLoad
が2回呼び出されました。 1回目は[UIViewController View]
、2回目は[UINib instanciateWithOwner:Options]
である。なぜこうなった?それは防ぐことができますか?viewDidLoadが2回呼び出されました
おかげ
あなたはviewDidLoad
の内側に置かれた任意のコードは、すべての問題外で複数回実行することができるはずです。あなたのコントローラのために一度だけ実行する必要があるコードを持っているなら、-awakeFromNib
を使用してください。理由は、View Controllerのビューを複数回アンロードしてロードできるためです。 viewDidLoad
のコードは、現在の状態を反映するようにUIを変更する必要があります。
ここで私はそれをやり遂げました。あなたの特定の問題はバグであるように見えます。 Ned's answerを参照してください。
オブジェクト構築のメカニズムを確認する必要があります。コントローラを参照するnibファイルが1つしかない場合、このメソッドは複数回呼び出されるべきではありません。 (オブジェクトが再構築されている場合を除いて)。
あなたはViewDidLoad idemPotent内にコードを作成する必要があるかもしれないと思います。フレームワークコールバックメソッドがこの前提を確実にすることは、常に確実なことです。
これは同じ問題ですか?
Why is viewDidLoad called twice when the rootViewController property of UIWindow is set?
それは、この問題が頻繁に私のiOSデバイスで起こったことにより、二つの可能性がありますが、XCodeの4
+1そのバグのようです! – Joe
のバグかもしれないように見えます。
ルール#1:[init]関数でビュー関連設定を呼び出さないでください。すべてのビュー関連設定は、viewDidLoadおよびviewWillAppearで行われなければなりません。
ルール#2:viewDidLoadとviewWillAppearを確認してください、彼らは正しいスーパーファンクションを呼び出していますか?たとえば、viewDidLoad - > super viewDidLoadなどです。
これが役に立ちます。
私の場合は、私のユニットテストでviewDidLoadを呼び出している間、私はviewDidLoadでself.view(一度)を使用しました。これで2回の呼び出しが行われました。しかし、[testedViewController viewDidLoad]を[testedViewControllerビュー]に置き換えると、ダブルコールの問題はなくなりました。
良い答え。しかし、いくつかの隠れた参照がない限り、ViewDidLoadが複数回呼び出されるかどうかはわかりません。しかし、私は間違っているかもしれません。 –
viewDidLoadは、ビューが必要なときに自動的に呼び出されますが、ビューは必要ではありません。 'controller.view'や' [controller view] 'を使うと、元々ビューがnilだった場合にviewDidLoadが呼び出されます。ビューがinstanciateWithOwnerに設定されていなかったり、後でアンロードされた場合は、再度呼び出された理由が考えられます。 – Joe