Как правильно наблюдать за изменением отношений в Базовых данных? - PullRequest
0 голосов
/ 28 августа 2018

Я пытаюсь найти способ наблюдать за изменениями отношения «один ко многим» в основных данных. Настройка очень проста, мой основной контроллер вида - это просто контроллер табличного представления со списком телевизионных сетей:

Main Table View Controller

Эти телевизионные сети обновляются через поток сокетов, а контроллер извлеченных результатов поддерживает синхронизацию просмотра таблицы. Я хочу иметь возможность подключиться к телевизионной сети и получить подробный вид этой телевизионной сети, обновляющей станции в режиме реального времени.

Родитель:

Parent

Ребенок:

Child

Прикосновение к ячейке BBC из контроллера табличного представления приведет к переходу к DetailTableViewController и введению в него объекта TVNetwork (мой извлеченный контроллер результатов по-прежнему использует основной контроллер табличного представления в качестве своего делегата, поскольку он постоянно обновляется).

DetailViewController

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, обновляются, вставляются или удаляются? Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...