2017-11-07 11 views
0

私のアプリでSideMenu 2.3.4を使用し、v3.1.4にアップグレードしました。私は、APIの変更に適応するために必要ないくつかの改造を行った後、私のアプリを走った - それは、次のUIの操作後に墜落:iOS SideMenu v3.1.4がライフサイクルメソッドを順番通りに呼び出す

  1. オープンナビゲーションバーのボタンの上に別のものをロードする項目の
  2. タップをタップしてメニューアプリがクラッシュする前に、ビュー(メニューが閉じ、新しいビューが表示されます)、再びメニューを開くにはナビゲーションバーのボタン上
  3. タップ

メニューは、その最後のタップに反応して開くことができませんでした。デバッガの下で、私は2の後にviewDidLoad、次にviewWillAppearがその新しいビューのために呼び出されたことがわかりました。 3の後、同じビューのviewWillDisappear、viewDidDisappear、viewWillAppearが呼び出されました。

viewWillAppearでクラッシュしました。なぜなら、viewDidLoadのコードは、viewDidDisAppearの後に呼び出される最初のものであるからです。 AFAIK、viewDidDisappearは他のライフサイクルメソッドが呼び出される前にビューが閉じられていて、viewDidLoadが呼び出されなければならないことを意味すると考えられているので、それをカウントするのが正当です。つまり、viewWillAppearが呼び出されてはいけませんviewDidLoad。

iOSビューのライフサイクルを誤解していますか?これはSideMenu 3.1.4のバグですか?

おかげで、

マーク

+0

ビューコントローラがメモリから削除されているかどうかを判断するために、いくつかのコードを 'dealloc'メソッドに追加することをお勧めします。まだメモリに残っている場合は、ビューがもう画面には表示されないので、 'viewDidLoad'は再び呼び出されません。 (Swift Deallocについては、https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/Deinitialization.html#//apple_ref/doc/uid/TP40014097-CH19を参照してください) – JMFR

答えて

0

私はライフサイクルメソッドを誤解しましたネット番組でのドキュメントや記事の近い読書。私が見ていたクラッシュを排除

if (isBeingDismissed || isMovingFromParentViewController) { 
    // Do something - viewWillAppear will NOT be called before viewDidLoad. 
} 

:そこのviewDidLoad(例えば、viewDidUnload)のない反対はありませんが、これを行うことができますviewDidDisappearの1で

マーク