2017-01-17 4 views
0

My Swift 3 iOS App 3つのChildViewを持つTabBarControllerを継承するLoginViewControllerから開始し、それぞれがViewControllerのrootViewであるNavigationControllerです。Swift 3 TableViewControllerが初期化されない

1つのViewControllerには、LoginViewControllerに対してunwindSegueを実行するログアウトボタンが含まれています。

もう1つ(これは重要です)には2つのコンテナビューがあり、そのうちの1つはTableViewControllerです。 TableViewControllerは、バックエンドのデータで動的に埋められます。

バックエンドが私に0のデータを与えるとき、すべて正常に動作します。ログアウトボタンを押すと、すべてのViewControllerとContainerViewsとTableViewがdeinit()を正しく取得します。

TableViewControllerがバックエンドからデータを取得してセルを表示するとすぐに、TableViewControllerに対してdeinit()を呼び出しません。

何が原因でしょうか?私は要求に応じてコードを共有することができます。

私がこれまでに試したこと: 私は閉鎖が存在するあらゆるところで未所有の自己を使用しようとしました。今私は@エスケープでデータを取得するこの部分についてはわかりません:

func loadMyMessages() 
{ 
let myMessagesURL = "https://www.thewebsite.com/rest/messages/mine" 
self.tableView.isHidden = true 
if let url = URL(string: myMessagesURL) { 
    self.updateFeedFilter(url, filter: self.activeFilter, hashTag: activeHashTags, completion: { [unowned self] (feed) -> Void in 
     self.feed?.items.removeAll() 
     self.feed = feed 
    }) 
} 
} 

func updateFeedFilter(_ url: URL, filter: String, hashTag: String, completion: @escaping (_ feed: Feed?) -> Void) { 
let sid = self.prefs.string(forKey: "sid") 
let headers2: HTTPHeaders = [ 
    "lastId": "0", 
    "sid": sid!, 
    "filter": filter, 
    "hashTags": hashTag 
] 

Alamofire.request(url, method: .get, encoding: JSONEncoding.default, headers: headers2) 
    .responseJSON { [unowned self] response in 
     print(response) 
     guard let responseError = response.result.error else { 
      let feed = Feed(data: response.data!, sourceURL: url) 
      OperationQueue.main.addOperation({() -> Void in 
       completion(feed) 
       self.scrollToFirstRow() 
       self.tableView.isHidden = false 
       self.delegateClicked?.stopIndicator() 
      }) 
      return 
     } 
     self.showNoInternetDialog() 
     self.delegateClicked?.stopIndicator() 
    } 
} 

私は何か助けに感謝します!

+1

一般的には、強い参照サイクルの問題をチェックする必要があります。これは、クロージャーや他の参照型オブジェクトのreleshenshipsによって引き起こされる可能性があります。 – Dasem

+0

これは私が最初にチェックしたものです。私はすべての私の代議員を弱くし、私の閉鎖はすべて無用にしました。私はコード例に示されているエスケープクロージャについてはわかりません。それは問題だろうか? –

答えて

0

私はそれを理解しました。私は、ActiveLabelポッドによって提供されるhashTagTappedのアクションを定義したクロージャ内で[unowned self]を使用しなければなりませんでした。

閉鎖の場合、[unowned self]を使用してください。代理人はweak varを使用します。

関連する問題