2017-01-19 1 views
0

と変更rootController私は、実際のアプリケーションのルートコントローラを変更するため、この機能を使用して:クラッシュ、アニメーション

class func setRootController(newController: UIViewController, animation: UIViewAnimationOptions? = nil) { 

    let appDelegate = UIApplication.shared.delegate as! AppDelegate 

    if animation != nil { 

     let currentController = appDelegate.window!.rootViewController! 

     UIView.transition(from: currentController.view, to: newController.view, duration: 0.6, options: animation!, completion: { (completed) in 
      appDelegate.window?.rootViewController = newController 
     }) 


    } else { 
     appDelegate.window?.rootViewController = newController 
    } 
} 

私のコントローラwillAppear(setRootを使用するときに二回と呼ばれる:1 - コントローラに作成され、アニメーションが始まり、2 - 中完了ブロック):

override func viewWillAppear(_ animated: Bool) { 
    super.viewWillAppear(animated) 

    balanceView.bonuses = bonuses 
} 

didSetと私のbalanceView(ただのUIView)が含まれbonusesStack(stackView)とVARボーナス:

var bonuses: [Bonus]! { 
    didSet { 

     for subview in bonusesStack.arrangedSubviews { 
      bonusesStack.removeArrangedSubview(subview) 
      subview.removeFromSuperview() 
     } 

     bonuses.forEach { (bonus) in 
      let bonusView = BonusBalanceView.loadFromXib(bonus: bonus) 

      bonusesStack.addArrangedSubview(bonusView) 
     } 
    } 
} 

class func loadFromXib(bonus: Bonus) -> BonusBalanceView { 
    let bonusView = Bundle.main.loadNibNamed(String(describing: BonusBalanceView.self), owner: nil, options: nil)?.first as! BonusBalanceView 
    // some code here 
    return bonusView 
} 

willAppearが2回目に呼び出されると、コードsubview.removeFromSuperview()(2回目はbcs、スーパービューはnil)でクラッシュします。私はスーパービューチェックのためにブロックを追加しようとしましたが、何らかの理由で常にO_oを実行しています)

この行をコメント/削除すると(推奨されていませんが、bcsビューはまだstackViewサブビューにあります)、完了ブロックでコードがクラッシュします

答えて

0

問題は私のカスタムビューにありました。私はdrawメソッドをオーバーライドし、プログラムでレイヤーを処理します。 xibファイルでは、このビューにはサブビューが含まれています。何とか(¯\ _(ツ))/ /この層とサブビュー競合とクラッシュアプ​​リ

関連する問題