2016-08-09 4 views
3

Fabal経由でTwitter Kitのログインボタンを追加するまで、モーダルログインウィンドウを閉じるとOKが解除されます。TwitterとFabricのメモリリーク - Swift

import TwitterKit 

// UIview that I have in my login view controller 
@IBOutlet weak var twitterLoginView: UIView! 

override func viewDidLoad() { 
    super.viewDidLoad() 

    // Twitter integration 
    let twitterLogInButton = TWTRLogInButton { (session, error) in 
     if let unwrappedSession = session { 
      let alert = UIAlertController(title: "Logged In", 
       message: "User \(unwrappedSession.userName) has logged in", 
       preferredStyle: UIAlertControllerStyle.Alert 
      ) 
      alert.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.Default, handler: nil)) 
      self.presentViewController(alert, animated: true, completion: nil) 
     } else { 
      NSLog("Login error: %@", error!.localizedDescription); 
     } 
    } 
    // add to twitter UIView 
    twitterLoginView.addSubview(twitterLogInButton) 

} 

私は保持サイクルがあると思いますが、彼らが提案多かれ少なかれコードで、私はこの問題を解決する方法についての損失でね。私がtwitterボタンを押さずにログインウィンドウを閉じるだけでも、ログインウィンドウの割り当てが解除されないので、ボタンを追加すると問題が発生します。 twitterボタンを削除すると、割り当てが解除されます。何か案は?

答えて

3

おそらく、クロージャでの自己インスタンスキャプチャのためです。弱い自己を使うようにしてください:

override func viewDidLoad() { 
    super.viewDidLoad() 

    // Twitter integration 
    let twitterLogInButton = TWTRLogInButton { [weak self] (session, error) in 
     guard let s = self else {return} 
     if let unwrappedSession = session { 
      let alert = UIAlertController(title: "Logged In", 
       message: "User \(unwrappedSession.userName) has logged in", 
       preferredStyle: .Alert 
      ) 
      alert.addAction(UIAlertAction(title: "OK", style: .Default, handler: nil)) 
      s.presentViewController(alert, animated: true, completion: nil) 
     } else { 
      NSLog("Login error: %@", error!.localizedDescription); 
     } 
    } 
    // add to twitter UIView 
    twitterLoginView.addSubview(twitterLogInButton) 
} 
+1

'guard'ステートメントは' s'をオプションにすることができます。私のログインウィンドウの割り当てが解除されました。ありがとう。 – skymook