'Kotlin Multiplatform use NSUserDefaults setValue String on iOS got error
I write function
actual fun setItem(key: String, value: String) {
NSUserDefaults.standardUserDefaults.setValue(value, key)
}
And got this error. I think value string and use with Any
Showing Recent Messages
The following Kotlin source sets were configured but not added to any Kotlin compilation:
* androidAndroidTestRelease
* androidTestFixtures
* androidTestFixturesDebug
* androidTestFixturesRelease
You can add a source set to a target's compilation by connecting it with the compilation's default source set using 'dependsOn'.
See https://kotlinlang.org/docs/reference/building-mpp-with-gradle.html#connecting-source-sets
> Task :shared:compileKotlinIosX64 FAILED
e: /Users/anh.nguyen25/Desktop/momo-app-vix/shared/src/iosMain/kotlin/vn/momo/core/modules/storage/FastStorage.kt: (14, 45): Overload resolution ambiguity:
public external fun NSObject.setValue(value: Any?, forKey: String): Unit defined in platform.Foundation
public external fun NSObject.setValue(value: Any?, forKeyPath: String): Unit defined in platform.Foundation
public external fun NSObject.setValue(value: Any?, forUndefinedKey: String): Unit defined in platform.Foundation
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':shared:compileKotlinIosX64'.
> Compilation finished with errors
Solution 1:[1]
setValue is KVO method which has nothing to do with user defaults.
Replace it with setObject:
NSUserDefaults.standardUserDefaults.setObject(value, key)
p.s. if you need to use setValue or you'll face same problem with other methods, you can specify the needed method by providing the second parameter name, e.g. setValue(value, forKeyPath = key)
Solution 2:[2]
In addition to the answer above, if you're looking for a plug-and- play KMP key-value store, Multiplatform Settings is worth checking out. It also uses NSUserDefaults under the hood.
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | |
| Solution 2 | Brady |
