观察领域变化不会触发

时间:2019-05-23 15:59:29

标签: swift realm

在我的应用程序中,我有一个自定义RealmDatabase类。它为我初始化了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的类,以便可以开始与CloudKit同步。该类如下所示:

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)也从未输出到控制台。不过,我不知道我在做什么错。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

创建观察时,您正在丢弃观察。要解决此问题,您需要保留NotificationToken返回的observe

var token: NotificationToken? 

func start() {
    token = database.observe { changes in ... }
}