我目前正在开发一个应用程序,我遇到了一些我无法解决的问题。
我目前有两种观点:
我的问题是,在将新对象添加到我的Realm数据库并立即返回到第一个视图后,有时tableView
无法识别新添加的对象,但有时会识别它。
我希望这是足够的信息 - 如果需要,请问我问题。
override func viewWillAppear(_ animated: Bool) {
setupDataForViewTable()
tableView.delegate = self
tableView.dataSource = self
tableView.reloadData()
}
func setupDataForViewTable() {
let realmm = try! Realm()
let cryptocurrenciesFromDatabase = realmm.objects(crypto.self)
for crypto in cryptocurrenciesFromDatabase{
//For debugging
if crypto.name.count <= 0{
continue
}
let ROI = 0.0
let change24h = 0.0
let totalHolding = Double(crypto.buyingPrice) * Double(crypto.amount)
cryptoCurrencies.append((name : crypto.name, amount : crypto.amount, ROI : ROI, change24h : change24h, total : totalHolding))
}
}
然后是第二个视图中的代码,我添加东西:
func updateCryptoInRealmDatabase(name : String, buyingPrice : Double, amount : Double){
DispatchQueue(label: "background").async {
autoreleasepool {
let realm = try! Realm()
let objectToUpdate = realm.objects(crypto.self).filter("name CONTAINS %@", name).first
try! realm.write {
objectToUpdate!.buyingPrice = (objectToUpdate!.buyingPrice + buyingPrice) / 2
objectToUpdate!.amount += amount
}
}
}
}
答案 0 :(得分:0)
您需要确保在导航回第一个视图时更新tableView。如果该视图持有对该对象中的Realm对象和第二个视图编辑List
的引用,那么重新加载表就足够了。如果你持有对Realm对象的查询的引用,那么它将在提交更新后由Realm自动刷新。
您可以在再次显示视图后重新加载视图或注册Realm notifications并在第二个视图对其进行更改时更新视图。
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
tableView.reloadData()
}
如果第一个视图显示(相同)第二个视图正在编辑的Realm对象,则数据已经是最新的。我们将在这里获得相关对象的新数据:
func titleTableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return realmObject.relatedObjects.count
}
更新:修复了Realm Result
的刷新需求,并添加了Realm文档中通知的链接。