Swift Realm - 查询空集但数据在RealmBrowser中

时间:2016-10-26 01:18:17

标签: ios iphone swift database realm

我是iOS开发的新手。我尝试接收存储在领域数据库中的数据,但有时我得到一个空集,尽管我可以在RealmBrowser中看到数据。通常它有效,但它不可靠。

首先,我清除存储的数据,以确保我不会显示旧数据。 之后,我将其插入RealmDatabase,除此之外,我查询所有存储的数据,以便在tableView中显示它。

这是我的代码(Swift 3):

    let realm = try! Realm()
        try! realm.write {
            // clear all old data stored as fahrt.self
            //realm.delete(realm.objects(fahrt.self));
            realm.delete(realm.objects(fahrt.self));
            let nsArray = try! JSONSerialization.jsonObject(with: data as Data, options: []) as! NSArray;
            for eintrag in nsArray{
                realm.create(fahrt.self, value: eintrag, update: false)
            }
            try! realm.commitWrite();

        }

        DispatchQueue.main.async {
            let temp = ui as! DisplayViewController;
            let realm = try! Realm()
            let result = realm.objects(fahrt.self)
            ui.showData(res: result);
            // sometimes result is empty , don't know why
        }

RealmModel:

class fahrt: Object {
dynamic var id:  Int = 0
dynamic var date = ""
dynamic var from_lang: Double = 0.0
dynamic var from_lon: Double = 0.0
dynamic var to_lang: Double = 0.0
dynamic var to_lon: Double = 0.0

override static func primaryKey() -> String? {
   return "id"
}

}

1 个答案:

答案 0 :(得分:2)

首先,您不需要在realm.commitWrite()块中包含realm.write { }realm.commitWrite()realm.beginWrite()一起使用,但这两个都在realm.write { }内自动调用。 :)

其次,当您在后台线程上执行写入事务时,更改将在运行循环的下一次迭代中自动在主线程上公开。但是,在某些情况下,在后台写入后立即在主线程上调用代码时,可能还没有发生这种情况。要确保Realm在主线程上拥有最新的数据副本,您应该在执行查询之前在该调度块中调用realm.refresh()