Обновление: Мой вызов let vc = viewControllers(for: self)
возвращал неправильные значения, поэтому обновление не запускалось.UITableView не обновляется после вызова таблицыView.reloadData в главном потоке
Я пытаюсь обновить UITableView
с помощью метода tableView.reloadData
, но это не вызывает обновление?
Обновление должно произойти, когда selectAndHighlight
вызывается из контроллера родительского вида, когда результат поиска щелкнул
Ive искали вокруг, и от того, что я могу сказать, что мне нужно, чтобы вызвать обновление на главном потоке, так Я сделал это, но я все еще не получаю никаких обновлений?
В долгосрочной перспективе я, вероятно, хочу только обновить одну ячейку, но на данный момент я просто хочу, чтобы что-то обновлялось, что не работает. В моей команде печати во время перезагрузки нет вывода журнала.
Когда я прокручиваю содержимое с экрана, а затем снова включаю, новый контент там правильно, поэтому данные синхронизируются правильно, это просто не обновляется.
import UIKit
import RealmSwift
import XLPagerTabStrip
class ArtistViewControllerTableViewController: UITableViewController, IndicatorInfoProvider {
open var stageName = ""
var artists: Results<Artist>!
override func viewDidLoad() {
let realm = try! Realm()
artists = try! realm.objects(Artist.self).filter("stageName = '" + stageName + "'")
super.viewDidLoad()
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "ArtistCell", for: indexPath)
as! ArtistCellTableViewCell
let artist = artists[indexPath.row] as Artist
cell.artist = artist
print ("updating " + artist.artistName)
return cell
}
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
print("Artist Clicked")
}
open func selectAndHighlight(artist: Artist) {
print (stageName)
DispatchQueue.main.async {
let realm = try! Realm()
try! realm.write {
artist.artistName = "new name"
}
self.tableView.reloadData()
}
}
override func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return artists.count
}
func indicatorInfo(for pagerTabStripController: PagerTabStripViewController) -> IndicatorInfo {
return IndicatorInfo(title: stageName)
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
Расширение, которое заканчивается вызовом метода SelectAndHighlight после нажатия на результат поиска.
extension ParentViewController: HandleSearchResultClick{
func select(artist: Artist) {
print(artist.artistName + " clicked")
var x = 0
let vc = viewControllers(for: self)
let table = vc[x] as? ArtistViewControllerTableViewController
table?.selectAndHighlight(artist: artist)
}
}
где вы назвали selectAndHighlight? –
В контроллере родительского представления, который управляет всеми вкладками. Это протокол, и этот протокол работает. Триггеры print (stageName) и правильная печать. Я обновил сообщение, чтобы упомянуть протокол – Ben987654
Извините, что это не протокол. Просто я получаю ссылку на контроллер вида, когда нажимают на результат поиска. let table = vc [x] as? ArtistViewControllerTableViewController стол .selectAndHighlight? (Исполнитель: художник) – Ben987654