У меня есть список Entry
предметов, и у каждого из них есть связанные задачи. Эти записи заполняются в UITableView
следующим образом:

Синяя таблетка (?) показывает количество задач для каждой записи. Вот мои определения классов в Realm:
class Entry: NSObject{
@objc dynamic var name = ""
...
}
class Task: NSObject{
@objc dynamic var entry: Entry?
...
}
Моя цель - следить за уведомлениями Realm, чтобы обновлять счет задач для каждой записи без перезагрузки всего UITableView
. В настоящее время я делаю это, помещая прослушиватель уведомлений Realm на каждый UITableViewCell
, например:
//---------- UITableView delegate ----------
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let entry = entries[indexPath.row]
let cell = tableView.dequeueReusableCell(withIdentifier: "EntryCell", for: indexPath) as! EntryCell
cell.label.text = entry.name
//Task count
cell.entry = entry
cell.setupRealmListener()
return cell
}
//---------- Table Cell Definition ----------
class EntryCell: UITableViewCell{
@IBOutlet weak var label: UILabel!
@IBOutlet weak var date: UILabel!
@IBOutlet weak var taskCount: UILabel!
var entry: Entry!
//Task Count
func setupRealmListener(){
let realm = try! Realm()
guard !realm.isInWriteTransaction else{ return }
//***
token = realm.observe{ notification, realm in
let tasks = realm.objects(Task.self).filter("entry = %@", self.entry)
taskCount.text = "\(tasks.count)"
}
}
deinit {
token?.invalidate()
}
}
Есть несколько причин, по которым я пошел по этому пути, но мне интересно, есть лучший способ:
У меня есть уведомление об изменении моей коллекции entries
, но оно не срабатывает при добавлении / изменении задачи.
Я использую уведомление области для EntryCell
, но кажется, что множество ресурсов висит на одной ячейке таблицы.
I Я получаю тонны предупреждений от Realm, потому что у меня есть уведомление о моем UITableViewCell
, и, поскольку оно dequeue
'd, оно, похоже, не deinit
' d:
RLMNotificationToken выпущен без отмены регистрации уведомления. Вы должны держаться за RLMNotificationToken, возвращенный из addNotificationBlock, и вызывать [RLMNotificationToken invalidate], когда вы больше не будете sh, чтобы получать уведомления RLMRealm.
Любые идеи по улучшению способа обновления количество задач для каждой записи отдельно, без перезагрузки всей таблицы?