Я пытаюсь найти способ наблюдать за изменениями отношения «один ко многим» в основных данных. Настройка очень проста, мой основной контроллер вида - это просто контроллер табличного представления со списком телевизионных сетей:
Эти телевизионные сети обновляются через поток сокетов, а контроллер извлеченных результатов поддерживает синхронизацию просмотра таблицы. Я хочу иметь возможность подключиться к телевизионной сети и получить подробный вид этой телевизионной сети, обновляющей станции в режиме реального времени.
Родитель:
Ребенок:
Прикосновение к ячейке BBC из контроллера табличного представления приведет к переходу к DetailTableViewController и введению в него объекта TVNetwork (мой извлеченный контроллер результатов по-прежнему использует основной контроллер табличного представления в качестве своего делегата, поскольку он постоянно обновляется).
class DetailTableViewController: UITableViewController {
var tvNetwork: TVNetwork!
var stations: [Stations]? {
get {
let descriptor = NSSortDescriptor(key: "channel", ascending: true)
return tvNetwork.stations?.sortedArray(using: [descriptor]) as? [Stations]
}
}
override func viewDidLoad() {
super.viewDidLoad()
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return stations?.count ?? 0
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
if let cell = tableView.dequeueReusableCell(withIdentifier: "stationDetailCell", for: indexPath) as? StationDetailCell {
let station = stations![indexPath.row]
cell.channelLabel.text = station.channel
cell.nowPlayingLabel.text = station.nowPlaying
cell.viewers.text = "\(station.viewers)"
return cell
}
return UITableViewCell()
}
}
Этот код работает правильно, и ручная перезагрузка всегда будет показывать правильные обновленные данные. Я пробовал некоторые методы уведомления для объекта tvNetwork, и, несмотря на то, что станции обновляются, я не получаю уведомления (может быть, наблюдатели работают только для свойств, а не для отношений?). Есть ли простой способ наблюдать, когда «Станции» NSSet, принадлежащие tvNetwork, обновляются, вставляются или удаляются? Спасибо.