领域查询有时 return 无数据
Realm query sometimes return no data
我正在实施一个过程来存储数十万条记录并通过领域查询检索它们。
简化代码如下
- 领域对象
final class Friend: Object {
@objc dynamic var number: Int64 = 0
@objc dynamic var name: String = ""
convenience init(number: Int64, label: String) {
self.init()
self.number = number
self.label = label
}
override class func primaryKey() -> String? {
return "number"
}
}
extension Realm {
static var `default`: Realm {
get {
do {
let realm = try Realm(configuration: RealmConstants.configuration)
return realm
} catch {
return self.default
}
}
}
}
- RealmClient class
struct RealmClient {
static func save(_ list: [Friend],
completion: @escaping (Result<Void, Error>) -> Void) {
DispatchQueue.global().async {
autoreleasepool {
do {
let realm = Realm.default
try realm.write {
realm.add(list)
completion(.success(()))
}
} catch {
completion(.failure(error))
}
}
}
}
}
- DataStore class(带有调用目录扩展目标的共享文件)
class DataStore {
let realm = realm
init(realm: Realm.default) {
self.realm = realm
}
var recordcounts: Int {
return realm.objects(Friend.self).count
}
}
但是,有时realm查询returns0条记录。
- 查询结果
RealmClient.save(friendList) -> friendList is hundreds of thousands of data fetched from server
let dataStore = DataStore()
dataStore.recordcounts -> sometimes return 0
所以我实现了刷新领域实例,但没有帮助。
像这样。
realm.refresh()
- 问题
我希望能够始终在查询中获取数据。
如何使用查询实现稳定的数据?
Realm 写入是事务性的 - 事务是 Realm 将其视为单个不可分割操作的读取和写入操作列表。
写入后闭包{}内的读写是事务的一部分;在所有这些完成之前,数据不会被提交。交易也是全有或全无 - 所有操作都完成或 none.
对于这种情况最重要的是,事务是同步的,因此在事务中添加回调将呈现间歇性结果。
将回调移到写入事务之外
try realm.write {
realm.add(list)
}
completion(.success(()))
可以用我们以前写领域交易的方式来说明:
realm.beginWrite()
write some data
// Commit the write transaction to make this data available to other threads
try! realm.commitWrite() <- data is not valid until after it's been committed
//data has been committed
我正在实施一个过程来存储数十万条记录并通过领域查询检索它们。
简化代码如下
- 领域对象
final class Friend: Object {
@objc dynamic var number: Int64 = 0
@objc dynamic var name: String = ""
convenience init(number: Int64, label: String) {
self.init()
self.number = number
self.label = label
}
override class func primaryKey() -> String? {
return "number"
}
}
extension Realm {
static var `default`: Realm {
get {
do {
let realm = try Realm(configuration: RealmConstants.configuration)
return realm
} catch {
return self.default
}
}
}
}
- RealmClient class
struct RealmClient {
static func save(_ list: [Friend],
completion: @escaping (Result<Void, Error>) -> Void) {
DispatchQueue.global().async {
autoreleasepool {
do {
let realm = Realm.default
try realm.write {
realm.add(list)
completion(.success(()))
}
} catch {
completion(.failure(error))
}
}
}
}
}
- DataStore class(带有调用目录扩展目标的共享文件)
class DataStore {
let realm = realm
init(realm: Realm.default) {
self.realm = realm
}
var recordcounts: Int {
return realm.objects(Friend.self).count
}
}
但是,有时realm查询returns0条记录。
- 查询结果
RealmClient.save(friendList) -> friendList is hundreds of thousands of data fetched from server
let dataStore = DataStore()
dataStore.recordcounts -> sometimes return 0
所以我实现了刷新领域实例,但没有帮助。
像这样。
realm.refresh()
- 问题
我希望能够始终在查询中获取数据。 如何使用查询实现稳定的数据?
Realm 写入是事务性的 - 事务是 Realm 将其视为单个不可分割操作的读取和写入操作列表。
写入后闭包{}内的读写是事务的一部分;在所有这些完成之前,数据不会被提交。交易也是全有或全无 - 所有操作都完成或 none.
对于这种情况最重要的是,事务是同步的,因此在事务中添加回调将呈现间歇性结果。
将回调移到写入事务之外
try realm.write {
realm.add(list)
}
completion(.success(()))
可以用我们以前写领域交易的方式来说明:
realm.beginWrite()
write some data
// Commit the write transaction to make this data available to other threads
try! realm.commitWrite() <- data is not valid until after it's been committed
//data has been committed