【问题标题】:Is it possible to observe iOS NSObject value changes with Kotlin/Native是否可以使用 Kotlin/Native 观察 iOS NSObject 值的变化
【发布时间】:2020-05-14 11:35:41
【问题描述】:

我正在尝试从一个用 Kotlin/Native 编写的多平台项目的 ios 本机部分实现一个观察者,以更改 UserDefaults 中的给定键的值。这是我写的代码:

fun subscribeForDataChange(storeName: String, callback: () -> Unit) {
        NSUserDefaults(storeName).addObserver(
            object : NSObject() {
                fun observeValue(
                    observer: NSObject,
                    forKeyPath: String,
                    options: NSKeyValueObservingOptions,
                    context: COpaquePointer?
                ) {
                    callback()
                    print("Data Changed!!!")
                }
            },
            options = NSKeyValueObservingOptionNew,
            forKeyPath = DATA_KEY,
            context = null
        )

    }

问题是我从来没有收到通知,很可能是因为observeValue 没有在 NSObject 中定义,但我还应该做些什么来实现呢?

【问题讨论】:

    标签: ios kotlin kotlin-multiplatform kotlin-native


    【解决方案1】:

    您是在寻找 NSObject 更改,还是想观察 NSUserDefaults?如果是后者,请查看Multiplatform Settings。这是连接观察者的代码。

    https://github.com/russhwolf/multiplatform-settings/blob/master/multiplatform-settings/src/appleMain/kotlin/com/russhwolf/settings/AppleSettings.kt

    【讨论】:

    • 这确实是一个很好的解决方法,当有人需要观察 UserDefaults 时,它将解决大多数用例的问题。但在我的情况下,我需要能够监听来自不同进程的 UserDefaults 更改(同一组中的 2 个应用程序共享 UserDefaults)。根据文档:developer.apple.com/documentation/foundation/…NSUserDefaultsDidChangeNotification 不会触发如果更改是从不同的进程完成的,因此我正在尝试键值观察器。
    猜你喜欢
    • 1970-01-01
    • 2019-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多