Swift 3 TableViewController没有退出

时间:2017-01-17 15:49:55

标签: ios swift uitableview memory-management deinit

我的Swift 3 iOS应用程序从一个LoginViewController开始,它接近一个TabBarController,它有3个ChildViews,每个都是一个NavigationController,是ViewController的rootView。

一个ViewController包含一个Logout Button,它对LoginViewController执行unwindSegue。

另一个(这个是关键的)有2个容器视图,其中一个是TableViewController。 TableViewController动态填充来自后端的数据。

当后端给我0数据时,一切正常。你可以按下Logout按钮,每个ViewController,以及ContainerViews和TableView都能正确地获得deinit()。

一旦TableViewController从后端获取数据并显示单元格,它就不再为TableViewController调用deinit()

原因可能是什么?我可以根据要求分享代码。

到目前为止我尝试了什么: 我试图在无处不在的地方使用封闭存在。现在我不确定这部分我用@escaping获取数据:

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 个答案:

答案 0 :(得分:1)

好的,我想通了。我必须在闭包中使用[unowned self],我在其中定义了hashTagTapped的动作,该动作由ActiveLabel pod提供。

对于闭包尝试使用[unowned self],代表尝试使用weak var。