IOS上的KMM:没有事件循环。使用运行阻止{...}启动一个 [英] KMM on iOS: There is no event loop. Use runBlocking { ... } to start one
本文介绍了IOS上的KMM:没有事件循环。使用运行阻止{...}启动一个的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
Kotlin Multiplatform
项目中使用coroutines
。我在这两方面都没有经验。
我正在尝试调用此函数
fun startFlow {
coroutineScope.launch {
withContext(defaultDispatcher) {
myFlow.collect { next -> onNext(next) }
}
}
}
coroutineScope
在iOS
是
val defaultScope: CoroutineScope = object : CoroutineScope {
override val coroutineContext: CoroutineContext
get() = SupervisorJob() + Dispatchers.Default
}
这不是唯一出现此问题的调用,事实上,对coroutines
的所有调用似乎都失败,并显示以下错误:
kotlin.IllegalStateException: There is no event loop. Use runBlocking { ... } to start one.
这就是我导入库的方式
val commonMain by getting {
dependencies {
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.4.3")
}
}
我使用的是Kotlin
1.4.31。此问题仅存在于iOS
、Android
完美工作中。
我不知道我是否遗漏了什么。
推荐答案
对于iOS,您需要使用带有后缀的协程here
因此将您的导入替换为
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.5.2-native-mt")
还请注意,根据documentation:
在使用同样依赖于kotlinx.coroutines
的其他库(如KTOR)时,请确保指定kotlinx-coroutines
的多线程版本。您可以使用strictly
:执行此操作
implementation ("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.5.2-native-mt"){
version {
strictly("1.5.2-native-mt")
}
}
附注:用于预览的新本机并发模型available。查看New memory model migration guide。此功能发布后,将不再需要native-mt
后缀。
这篇关于IOS上的KMM:没有事件循环。使用运行阻止{...}启动一个的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文