Swift 起動時間が長いとクラッシュする問題と対策
iOSは読み込み時に、時間がかかりすぎるとクラッシュする。
今回はアプリのCoreDataのCSV読み込み時に時間がかかり、実機だと、起動できない問題が発生。
ちなみにシミュレーターだと、スペックが良いせいか、クラッシュしない。
対策
起動時間をへらす必要がある。しかし、CoreDataへの読み込み時間は変更のしようがない。 それで、StoryBoardで、別ウインドウを作成し、そこへ処理を投げることにした。
override func viewDidAppear(_ animated: Bool) { super.viewDidAppear() if datDics.count == 0 { //起動時間が15秒すぎるとアプリが落ちるのでIndicatorViewにて読む込処理をする. performSegue(withIdentifier: "toIndicator" , sender: nil) } }
viewDidAppearで処理をするところがポイント
viewDidLoadはまだ画面が生成されていない。そこでsegueで画面遷移しても、望む結果は得られなかった。
遷移先の画面ではインジケーターを表示して、先程起動時間が長いと言われていた関数を読み込む。
override func viewDidAppear(_ animated: Bool) { //インジケーター表示 label_indicator.startAnimating() //問題の読み込みに時間がかかる関数。約1万件のデータをマイグレーションしている。coredataは関数内でsave しているので問題ない。 Dic_iphone().setupDatDicFromCsv() //終わったらすぐに元画面に戻る。 performSegue(withIdentifier: "backToTop", sender: nil) }
viewDidAppearとviewDidLoadは同じキューでは無いようです。 わかる方いたら教えていただけますか.