IOS应用程序中的Realm数据库困难

时间:2018-03-12 09:25:52

标签: ios swift realm

我目前正在开发一个应用程序,我遇到了一些我无法解决的问题。

我目前有两种观点:

  1. 第一个视图是表示我的Realm对象的tableView。
  2. 第二个视图用于向我的Realm数据库添加对象。
  3. 我的问题是,在将新对象添加到我的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
                }
            }
        }
    }
    

1 个答案:

答案 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文档中通知的链接。