2015-01-28 1 views
1

이 코드가 있는데 전달 된 클로저를 실행하게하는 궁극적 인 목표와 함께 뷰의 UIButton에 동작을 할당하려고합니다. 그러나, 버튼을 탭하여 할당 된 액션을 호출하려고하면 앱이 비정상적으로 중단됩니다.UIButton이 선택기 동작을 호출 할 때 EXC_BAD_ACCESS 가져 오는 중

특히 class AppDelegate: UIResponder, UIApplicationDelegate 행에 오류 Thread 1: EXC_BAD_ACCESS (code=EXC_I386_GPFLT)가 표시됩니다. 나는 스위프트가 safety이라고 부르는 것에 대해 뭔가를 추측하고있다. 아마 explatelyly unwrapped optionals에 문제가있는 것일까?

아이디어가 있으십니까?

import Foundation 
import UIKit 

class GenericCustomPopupViewController: UIViewController { 
    @IBOutlet weak var containerView: UIView! 
    @IBOutlet weak var popupTitleLabel: UILabel! 
    @IBOutlet weak var popupBodyLabel: UILabel! 
    @IBOutlet weak var okayButton: UIButton! 

    // var okayButtonAction: (()->Void)! 

    override func viewDidLoad() { 

     okayButton.layer.cornerRadius = 17 
     okayButton.layer.borderWidth = 1 
     okayButton.layer.borderColor = UIColor(red: 195/255, green: 33/255, blue: 121/255, alpha: 1).CGColor 

    } 

    func showPopupInView(rootView:UIView) { 

     // self.okayButtonAction = completion 
     self.view.frame = rootView.bounds 
     rootView.addSubview(self.view) 

     self.okayButton.addTarget(self, action:"buttonTapped:", forControlEvents:.TouchUpInside) 

     self.containerView.center.y = -400 
     self.containerView.alpha = 0 

     UIView.animateWithDuration(0.5, delay: 0.0, usingSpringWithDamping: 0.8, initialSpringVelocity: 2, options: UIViewAnimationOptions.CurveEaseInOut, animations: ({ 
     self.containerView.center.y = rootView.center.y 
     self.containerView.alpha = 1 
    }), completion: nil) 

} 

    func hidePopupView() { 
     self.view.removeFromSuperview() 
    } 

    func buttonTapped(sender: UIButton!) { 
     println("test") 
    } 


} 

이있는 UIViewController는 부모 뷰에서 다음과 같이 인스턴스화 :

var permissionsPopup = GenericCustomPopupViewController(nibName:"LocationPermissionsInfoView", bundle: nil) 
    permissionsPopup.showPopupInView(self.view) 

답변

1

아, 그것을 발견.

.showPopupInView() 뒤에 permissionsPopup 참조 GenericCustomPopupViewController이 할당 해제되었습니다. 나는 그것을 더 이상 필요로하지 않을 때 나중에 그것에 할당하고 그것을 할당 해제함으로써 해결했다.

관련 문제