2017-10-10 3 views
0

plantage après projet mise à niveau vers Xcode 9 et rapide 4. lors du débogage àapplication plantage après la mise à jour du code Xcode 9 et rapide application 4

backview.addsubview(stackview) 

app écraser avec libC++ abi.dylib: se terminant par uncaught exception de type NSException. Le code fonctionne parfaitement dans swift 3. Mais après la migration vers swift 4, il s'est écrasé. C'est toute ma fonction.

var isAlreadyThere = false 

    if let audioView = self.view.subviews.filter (
     { $0.tag == 123456}).first { 

     audioView.tag = 123456 
     isAlreadyThere = true 
    } 

    if isAlreadyThere { 
     return 
    } 

    let blurEffect = UIBlurEffect(style: UIBlurEffectStyle.light) 
    let backView = UIVisualEffectView(effect: blurEffect) 
    backView.tag = 123456 
    backView.frame = CGRect(x: 0, y: self.view.frame.height+35 , width: self.view.frame.width, height: 40) 
    backView.autoresizingMask = [.flexibleWidth, .flexibleHeight] 
    view.addSubview(backView) 

    pauseButton = UIButton(type: .custom) 
    pauseButton.titleLabel?.font = Util.getFontSize() 
    pauseButton.setTitle("Pause", for: .normal) 
    pauseButton.setTitleColor(UIColor.black, for: .normal) 
    pauseButton.addTarget(self, action: #selector(pausePressed(_:)), for: .touchDown) 

    durationLabel = UILabel() 
    durationLabel.textColor = UIColor.black 
    durationLabel.font = Util.getFontSize() 
    durationLabel.textAlignment = .center 
    durationLabel.text = "0:00" 

    stopButton = UIButton(type: .custom) 
    stopButton.titleLabel?.font = Util.getFontSize() 
    stopButton.setTitle("Stop", for: .normal) 
    stopButton.setTitleColor(UIColor.black, for: .normal) 
    stopButton.addTarget(self, action: #selector(stopPressed(_:)), for: .touchDown) 

    let stackView = UIStackView(frame: CGRect(x: 0, y:0 , width: backView.frame.width, height: 40)) 
    stackView.alignment = .fill 
    stackView.axis = .horizontal 
    stackView.distribution = .fillEqually 
    stackView.spacing = 5 
    stackView.addArrangedSubview(pauseButton) 
    stackView.addArrangedSubview(durationLabel) 
    stackView.addArrangedSubview(stopButton) 

    backView.addSubview(stackView) 

    if audioViewYposition == nil { 
     audioViewYposition = self.view.frame.height - 40 
    } 

    UIView.animate(withDuration: 0.2, delay: 0.1, options: .curveEaseInOut, animations: { 
     backView.frame.origin.y = self.audioViewYposition 
    }, completion: nil) 
+0

Essayez d'ajouter un point d'arrêt d'exception et de voir où le problème se produit. –

Répondre

0

Comme indiqué en cas d'erreur, vous devez ajouter une sous-vue sur la vue du contenu et non pas directement sur la vue de l'effet visuel si la solution est:

backView.contentView.addSubview(stackView) 

Assurez-vous que si votre point d'arrêt d'exception est activé pour sauter une quelques images du point d'arrêt pour voir le message d'erreur dans la console:

*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', 
reason: '<UIStackView: 0x109946ff0; frame = (0 0; 375 40); layer = <CATransformLayer: 0x1c4236640>> 
has been added as a subview to 
<UIVisualEffectView: 0x109945f40; frame = (0 702; 375 40); autoresize = W+H; tag = 123456; layer = <CALayer: 0x1c002ebc0>>. 
Do not add subviews directly to the visual effect view itself, 
instead add them to the -contentView.' 
+0

Merci pour votre réponse. oui, j'ajoutais dans backView au lieu de contentView. Mais il travaillait dans swift 3. il a juste commencé à s'écraser après la migration de swift 4. –

+0

@jaypatel De nouveaux SDKs doivent avoir été lancés. Juste des choses d'Apple ... –