Swift 起動時間が長いとクラッシュする問題と対策

iOSは読み込み時に、時間がかかりすぎるとクラッシュする。
今回はアプリのCoreDataのCSV読み込み時に時間がかかり、実機だと、起動できない問題が発生。 ちなみにシミュレーターだと、スペックが良いせいか、クラッシュしない。

対策

起動時間をへらす必要がある。しかし、CoreDataへの読み込み時間は変更のしようがない。 それで、StoryBoardで、別ウインドウを作成し、そこへ処理を投げることにした。 f:id:happy_teeth_ago:20180828132316p:plain:h500

  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は同じキューでは無いようです。 わかる方いたら教えていただけますか.