观察领域变化不触发
Observing realm changes are not firing
在我的应用程序中,我有一个自定义 RealmDatabase
class。它为我初始化了 Realm 数据库。
public class RealmDatabase: Database {
let realm: Realm
//
// I also provide a shared() singleton
//
public init(fileURL: URL) {
let config = Realm.Configuration(fileURL: fileURL)
Realm.Configuration.defaultConfiguration = config
realm = try! Realm()
}
public func observe<T>(_ block: @escaping ((T) -> Void), for object: T.Type) where T : Storable {
realm.objects(object).observe { (changes) in
print("Changes: ", changes)
}
}
}
现在,我还写了一个名为 SyncEngine
的 class,这样我就可以开始与 CloudKit 同步了。 class 看起来像这样:
public class SyncEngine: NSObject {
private let database: Database
public init(database: Database) {
self.database = database
super.init()
}
public func start() {
database.observe({ restaurant in
print("changes!")
}, for: Restaurant.self)
}
}
现在,在我的 AppDelegate
中,我执行以下操作:
let database = RealmDatabase.shared()
let syncEngine = SyncEngine(database: database)
syncEngine.start()
但是,问题是我的观察者从未被解雇并且 print("Changes: ", changes)
从未被打印到控制台。不过,我不知道我做错了什么。有什么想法吗?
您在创建观察时将其丢弃。为了解决这个问题,你需要保留 observe
.
返回的 NotificationToken
var token: NotificationToken?
func start() {
token = database.observe { changes in ... }
}
在我的应用程序中,我有一个自定义 RealmDatabase
class。它为我初始化了 Realm 数据库。
public class RealmDatabase: Database {
let realm: Realm
//
// I also provide a shared() singleton
//
public init(fileURL: URL) {
let config = Realm.Configuration(fileURL: fileURL)
Realm.Configuration.defaultConfiguration = config
realm = try! Realm()
}
public func observe<T>(_ block: @escaping ((T) -> Void), for object: T.Type) where T : Storable {
realm.objects(object).observe { (changes) in
print("Changes: ", changes)
}
}
}
现在,我还写了一个名为 SyncEngine
的 class,这样我就可以开始与 CloudKit 同步了。 class 看起来像这样:
public class SyncEngine: NSObject {
private let database: Database
public init(database: Database) {
self.database = database
super.init()
}
public func start() {
database.observe({ restaurant in
print("changes!")
}, for: Restaurant.self)
}
}
现在,在我的 AppDelegate
中,我执行以下操作:
let database = RealmDatabase.shared()
let syncEngine = SyncEngine(database: database)
syncEngine.start()
但是,问题是我的观察者从未被解雇并且 print("Changes: ", changes)
从未被打印到控制台。不过,我不知道我做错了什么。有什么想法吗?
您在创建观察时将其丢弃。为了解决这个问题,你需要保留 observe
.
NotificationToken
var token: NotificationToken?
func start() {
token = database.observe { changes in ... }
}