My Swift 3 iOS App запускается с LoginViewController, который переходит в TabBarController, у которого есть 3 ChildViews, каждый из которых является NavigationController, являющимся корневым элементом ViewController.Swift 3 TableViewController не deinit
One ViewController содержит кнопку выхода из системы, которая выполняет функцию unwindSegue в LoginViewController.
Другой (этот критический) имеет 2 вида контейнеров, один из них - TableViewController. TableViewController заполняется динамически данными из бэкэнд.
Когда бэкэнд дает мне 0 данных, все работает нормально. Вы можете нажать кнопку «Выход», и каждый ViewController, так же как ContainerViews и TableView правильно выполняет deinit().
Как только TableViewController получает данные из бэкэнд и отображает ячейки, он больше не вызывает deinit() для TableViewController.
В чем может быть причина? Я могу использовать код по запросу.
что я пробовал до сих пор: Я попытался использовать незанятое я везде, где есть закрытие. Теперь я не уверен в этой части, где я получаю данные с @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()
}
}
Я благодарен за любую помощь!
В целом - вам нужно проверить проблему сильного эталонного цикла, это может быть вызвано закрытием или повторным подключением других объектов ссылочного типа. – Dasem
Это то, что я проверил первым. я сделал всех моих делегатов слабым вар, и все мои закрытые блоки не были. я не уверен в закрытии, которое показано в примере кода. Это может быть проблема? –