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

iOS-Ionic-Cordova Plugin Media调用getCurrentPosition报NSInvalidArgumentException错误

解决cordova-plugin-media v5.0.2调用getCurrentPosition()在Xcode触发NSInvalidArgumentException的问题

我之前也踩过这个坑!针对你用cordova-plugin-media@^5.0.2调用getCurrentPosition()时,仅在Xcode中出现NSInvalidArgumentException的问题,给你几个实用的排查和修复方向:

  • 确认Media对象的初始化时机
    一定要保证在Media对象成功完成加载后再调用getCurrentPosition(),iOS上的Media实例初始化是异步的,刚创建就调用位置获取会导致底层AVPlayer对象未就绪,触发异常。推荐在Media的成功回调内执行位置获取,或者加个短延迟确保初始化完成:

    const audioPath = cordova.file.applicationDirectory + 'www/audio/test.mp3';
    const myMedia = new Media(audioPath,
      // 加载成功回调内调用
      () => {
        myMedia.getCurrentPosition(
          pos => console.log('当前播放位置:', pos),
          err => console.error('获取位置失败:', err)
        );
      },
      err => console.error('Media初始化失败:', err)
    );
    

    另外要注意iOS上的文件路径必须正确,尽量用Cordova的cordova.file API拼接路径,避免相对路径导致的实例无效。

  • 尝试调整插件版本
    cordova-plugin-media v5.0.2在iOS端确实存在getCurrentPosition()相关的已知bug,你可以试试降级到v5.0.1,或者升级到最新稳定版来解决:

    # 先卸载现有插件
    cordova plugin remove cordova-plugin-media
    # 安装v5.0.1版本
    cordova plugin add cordova-plugin-media@5.0.1
    

    操作前记得备份项目,避免版本变更带来的其他兼容性问题。

  • 检查Xcode项目配置与缓存

    • 确保Info.plist中添加了必要的音频权限,比如NSAppleMusicUsageDescription(即使不涉及音乐库,插件底层可能依赖相关配置),缺失权限可能导致底层媒体对象初始化失败。
    • 清理Xcode的构建缓存:点击菜单栏Product -> Clean Build Folder,然后重新编译项目,很多奇怪的iOS原生异常都能通过清理缓存解决。
  • 排查多实例冲突问题
    如果你的项目中同时创建了多个Media实例,可能会导致底层AVPlayer对象的状态混乱,建议确保同一时间只有一个活跃的Media实例,或者在调用getCurrentPosition()前确认实例没有被销毁或置空。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 07:37:18