Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/106.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Phonegap蜂鸣音/声音iOS错误_Ios_Cordova - Fatal编程技术网

Phonegap蜂鸣音/声音iOS错误

Phonegap蜂鸣音/声音iOS错误,ios,cordova,Ios,Cordova,我正在尝试使用PhoneGap/Cordova 1.6.0播放声音文件。 当我播放声音时,会出现以下错误: ERROR: Method 'create:withDict:' not defined in Plugin 'Media' FAILED pluginJSON = {"className":"Media","methodName":"create","arguments":["INVALID","94671882-85c3-9173-17a2-ed166310d77d","beep.wa

我正在尝试使用PhoneGap/Cordova 1.6.0播放声音文件。 当我播放声音时,会出现以下错误:

ERROR: Method 'create:withDict:' not defined in Plugin 'Media'
FAILED pluginJSON = {"className":"Media","methodName":"create","arguments":["INVALID","94671882-85c3-9173-17a2-ed166310d77d","beep.wav"]}
即使我收到这些错误信息,声音也会在模拟器中播放,但不会在我的设备(iPad 2 5.1)上播放。我尝试了navigator.notification.beep和new Media(),但它们都抛出相同的错误


有人知道如何解决这个问题吗?

当我的第四个参数PhoneGap.exec()与我的Objective-C方法名称不匹配时,我遇到了这个错误


验证错误消息中描述的“methodName”是否确实存在于您的Objective-C实现中。

我很确定这是Cordova中的一个bug

事情是这样的,我们从以下几点开始:

navigator.notification.beep
这将触发(cordova-1.6.1.js):

创建媒体对象将导致:

var Media = function(src, successCallback, errorCallback, statusCallback) {

// successCallback optional
if (successCallback && (typeof successCallback !== "function")) {
    console.log("Media Error: successCallback is not a function");
    return;
}

// errorCallback optional
if (errorCallback && (typeof errorCallback !== "function")) {
    console.log("Media Error: errorCallback is not a function");
    return;
}

// statusCallback optional
if (statusCallback && (typeof statusCallback !== "function")) {
    console.log("Media Error: statusCallback is not a function");
    return;
}

this.id = utils.createUUID();
mediaObjects[this.id] = this;
this.src = src;
this.successCallback = successCallback;
this.errorCallback = errorCallback;
this.statusCallback = statusCallback;
this._duration = -1;
this._position = -1;
exec(null, this.errorCallback, "Media", "create", [this.id, this.src]);
};
如果您查看Cordova.plist,您将看到插件名称“Media”映射到“CDVSound”,而在CDVSound中没有创建方法

由于“媒体”没有“创建”的方法,我们得到:

那我们怎么能听到声音呢

好问题。。如果你看:

new Media('beep.wav')).play();
您注意到我们称之为play(),让我们看看它的作用:

Media.prototype.play = function(options) {
    exec(null, null, "Media", "startPlayingAudio", [this.id, this.src, options]);
};
在CDVSound.h中:

- (void) startPlayingAudio:(NSMutableArray*)arguments withDict:(NSMutableDictionary*)options;

我也有同样的错误…有人吗?听起来很傻,但你确定iPad没有静音吗?是的,我确定。你已经检查了又检查了。是的,你是对的。CDVSound.h/m文件中没有“创建”方法。我不知道在exec()调用中是否还有其他函数需要替换。我试过一些,但似乎都不管用。我曾尝试在旧文件和google上搜索create方法,但没有成功。更新:我刚从Cordova成员处获得批准,从JS文件调用“create()”肯定是一个bug
Media.prototype.play = function(options) {
    exec(null, null, "Media", "startPlayingAudio", [this.id, this.src, options]);
};
- (void) startPlayingAudio:(NSMutableArray*)arguments withDict:(NSMutableDictionary*)options;