Добрый вечер! Уже сломал голову, и никак не могу найти решение.
И так, есть приложение, которое парсит XML и выводит данные в UITableView. Для переключения источников было реализовано меню с использованием UIStackView, действия для кнопок следующие:
switch city {
case .topNews:
listOfNewsVM.removeAll()
tableView.reloadData()
feedUrl = "https://tass.ru/rss/v2.xml"
fetchXMLData()
}
1. Стираем все данные в таблице.
2. Перезагружаем ее.
3. Переменной задаем значение
4. Выполняем функцию Парсинга XML.
Данные вносятся, но старые не удаляются. Получается, чтобы посмотреть новые данные, надо пролистать старые. Как мне сделать так, чтобы при повторном запуске функции, старые данные стирались и оставались только новые?
Функция, которая находится в MainViewController:
func fetchXMLData() {
XMLParserFactory.fetchData(url: feedUrl) { (listOfXMLVM, error) in
if error == nil {
self.listOfNewsVM = listOfXMLVM!
self.tableView.reloadData()
}
else {
print(error?.localizedDescription ?? "Error")
}
}
}
И вот основной файл, где происходит обработка XML:
class XMLParserFactory {
static func fetchData(url: String, withCallback completionHandler: @escaping (_ listOfModels: [XMLParserVM]?, _ error: Error?) -> Void) {
XMLParserClient.sharedInstance().fetchXMLData(for: url) { (newsModelList, error) in
print("Fetch data Factory ", newsModelList?.count ?? "0")
if error == nil {
var listOfNewsVM = [XMLParserVM]()
newsModelList?.forEach { model in
let parserVM = XMLParserVM.init(model)
listOfNewsVM.append(parserVM)
}
// for item in listOfNewsVM {
// print("\(item.title) - \(item.link)")
// }
completionHandler(listOfNewsVM, nil)
}
else {
completionHandler(nil, error)
}
}
}
}
class XMLParserVM {
var model:NewsModel?
init(_ model:NewsModel) {
self.model = model
}
var title: String {
if let _ = model {
return (model?.title)!
}
return ""
}
var link: String {
if let _ = model {
return (model?.link)!
}
return ""
}
var desc: String {
if let _ = model {
return (model?.desc)!
}
return ""
}
}
Буду очень благодарен за помощь. Самое главное - очищать старые данные в таблице и отображать только новые.
P.S. Заметил еще такой момент, когда я получаю новые данные при нажатии на кнопку, счетчик "print("Fetch data Factory ", newsModelList?.count ?? "0")" выводит общее кол-во данных, т.е старые и новые. Получается, что старые данные не стираются.