IOS上的KMM:没有事件循环。使用运行阻止{...}启动一个 [英] KMM on iOS: There is no event loop. Use runBlocking { ... } to start one

查看:8
本文介绍了IOS上的KMM:没有事件循环。使用运行阻止{...}启动一个的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试在Kotlin Multiplatform项目中使用coroutines。我在这两方面都没有经验。

我正在尝试调用此函数

fun startFlow {
    coroutineScope.launch { 
        withContext(defaultDispatcher) {
           myFlow.collect { next -> onNext(next) }
        } 
    }
}

coroutineScopeiOS

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")
        }
    }
我使用的是Kotlin1.4.31。此问题仅存在于iOSAndroid完美工作中。

我不知道我是否遗漏了什么。

推荐答案

对于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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆