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.fileAPI拼接路径,避免相对路径导致的实例无效。尝试调整插件版本
cordova-plugin-mediav5.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原生异常都能通过清理缓存解决。
- 确保Info.plist中添加了必要的音频权限,比如
排查多实例冲突问题
如果你的项目中同时创建了多个Media实例,可能会导致底层AVPlayer对象的状态混乱,建议确保同一时间只有一个活跃的Media实例,或者在调用getCurrentPosition()前确认实例没有被销毁或置空。
内容的提问来源于stack exchange,提问作者user9346201
相关产品推荐
相关产品推荐

