You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

KMM应用中Realm仓库dologin方法调用报未识别选择器异常

问题原因与解决方案

异常原因

  1. KMM绑定的命名转换问题
    Kotlin的suspend函数暴露给Swift时,会自动转为带completionHandler的Objective-C风格方法,命名严格遵循Kotlin到Obj-C的转换规则:Kotlin方法名需为标准小驼峰(首字母小写,后续单词首字母大写),生成的Obj-C选择器会基于此规则拼接参数名。

你的login方法符合小驼峰规范,生成的选择器loginEmail:password:completionHandler:能被Swift正确识别;但dologin是全小写连写(不符合Kotlin命名规范),导致KMM生成绑定文件时出现命名转换异常,Swift端调用时找不到对应的方法实现,抛出unrecognized selector错误。

  1. 未更新共享模块绑定
    如果新增dologin方法后没有重新编译KMM共享模块,Swift端的自动生成桥接文件不会同步更新,自然找不到新方法的绑定信息,也会触发该异常。

解决步骤

  • 修正Kotlin方法命名
    遵循Kotlin编码规范,将dologin改为标准小驼峰写法doLogin:
suspend fun doLogin(email: String, password: String): User {
    return appService.login(Credentials.emailPassword(email, password))
}
  • 重新编译共享模块
    修改Kotlin代码后,重新编译KMM共享模块(比如执行./gradlew shared:compileKotlinIos,或在Android Studio中点击编译按钮),确保Swift端获取到最新的绑定文件。
  • 更新Swift调用代码
    将Swift中的调用改为匹配新方法名:
repo.doLogin(email: $userId.wrappedValue, password: $password.wrappedValue) { user, error in
    // 处理回调逻辑
}

额外提示

KMM对Kotlin代码的命名规范敏感度较高,非标准命名容易引发跨平台绑定异常,建议始终遵循Kotlin官方命名约定编写共享模块代码。

内容的提问来源于stack exchange,提问作者dhaval123

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 00:02:29