Можно ли наблюдать изменения значения iOS NSObject с помощью Kotlin/Native

Я пытаюсь реализовать наблюдатель за изменениями значения для ключа дать в UserDefaults из родной части ios многоплатформенного проекта, написанного на Kotlin/Native. Вот код, который я написал:

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, но что еще я должен сделать для этого?


person Kamen Goranchev    schedule 14.05.2020    source источник


Ответы (1)


Вы ищете изменение NSObject или хотите наблюдать за NSUserDefaults? Если второе, ознакомьтесь с настройками мультиплатформенности. Вот код, который подключает наблюдателей.

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

person Kevin Galligan    schedule 14.05.2020
comment
Это действительно очень хороший обходной путь, и он решит проблему в большинстве случаев использования, когда кому-то нужно соблюдать UserDefaults. Но в моем случае мне нужно было бы иметь возможность прослушивать изменения в UserDefaults из другого процесса (2 приложения в одной группе, использующие UserDefaults). Согласно документации: developer.apple.com/documentation/foundation/ NSUserDefaultsDidChangeNotification не сработает, если изменение будет выполнено из другого процесса, поэтому я пробовал наблюдать за ключом-значением. - person Kamen Goranchev; 15.05.2020