[英]Swift Realm - Query Empty Set but Data is in RealmBrowser
我是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"
}
}
首先,您不需要在realm.write { }
塊中包含realm.commitWrite()
。 realm.commitWrite()
與realm.beginWrite()
結合使用,但是在realm.write { }
內部會自動調用這兩個realm.write { }
。 :)
其次,當您在后台線程上執行寫事務時,更改將在運行循環的下一次迭代時自動顯示在主線程上。 但是,在某些情況下,在后台寫入后立即在主線程上調用代碼時,這可能尚未發生。 為確保Realm在主線程上具有其數據的最新副本,應在執行查詢之前在該分派塊中調用realm.refresh()
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.