领域通知和UITableView的问题

时间:2017-07-10 13:29:09

标签: ios swift uitableview realm

我目前有一个包含三个对象的Realm数据库:

class Language: Object {
      let lists = List<List>()
}

class List: Object {
      let words = List<Word>()
}

class Word: Object {
      dynamic var name : String = ""
}

所以对象关系是:语言 - &gt;清单 - &gt;字

我分别在UITableView,LanguageTableViewController,ListTableViewController和WordTableViewController中显示这些对象。 要在发生更改时更新TableView,我在LanguageTableViewController中使用Realm Notifications:

languageToken = languages.addNotificationBlock { [weak self] (changes: RealmCollectionChange) in
        self?.updateLanguages(changes: changes)
    }

使用当前方法更新TableView(方法基于Realm站点的教程):

func updateLanguages<T>(changes: RealmCollectionChange<T>) {
    switch changes {
    case .initial:
        self.tableView.reloadData()

    case .update(_, let deletions, let insertions, let updates):
        self.tableView.beginUpdates()
        self.tableView.insertRows(at: insertions.map {IndexPath(row: $0, section: 0)}, with: .automatic)
        self.tableView.reloadRows(at: updates.map {IndexPath(row: $0, section: 0)}, with: .automatic)
        self.tableView.deleteRows(at: deletions.map {IndexPath(row: $0, section: 0)}, with: .automatic)
        self.tableView.endUpdates()

    default: break
    }
}

现在我的问题:当添加或更新新的“语言”对象时,此方法有效。但是,当创建新的List或Word对象时,也会调用此方法 - 使用插入更新。这会导致UITableView异常,因为没有创建Language对象,但updateLanguages方法想要插入新单元格。

我的问题是:我怎样才能监控对象数量/数量的变化?或者有更好的方法解决这个问题吗?

0 个答案:

没有答案