我试图在iOS上的phonegap中触发自定义事件。好的,到目前为止我做了什么:
我已经创建了一个自定义插件,我可以通过Javascript调用我的插件,并且一切正常。基本上,插件显示ModalViewController呈现一些本机功能
例如录制和编辑视频,一旦用户完成,我会将视频上传到youtube。我想在下载完成时发起一个事件,但目前我无法做到这一点。
这是我使用的代码的一部分:
在我的index.html中,通过单击按钮触发了此功能,(我不是Javascript开发人员)nativeFunction基本上调用我的自定义插件。
function testCustomPlugin()
{
MyClass.nativeFunction(
function(result) {
alert("Success : \r\n"+result);
},
function(error) {
alert("Error : \r\n"+error);
}
);
document.addEventListener("post_sent",onPostSent,false);
}
function onPostSent()
{
alert("post sent");
}
这是我的MyClass.js:
var MyClass = {
nativeFunction: function(types, success, fail) {
return Cordova.exec(success, fail, "MyClass", "showInterface", types);
}
}
在MyClass.m中我有两个方法:showInterface和sendNotification,
showInterface.m
- (void) showInterface:(NSMutableArray*)arguments withDict:(NSMutableDictionary*)options
{
self.callbackID = [arguments objectAtIndex:0];
// missing code
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(sendSuccessNotification:)
name:@"PostSentNotification" object:nil];
}
-(void)sendSuccessNotification:(NSNotification *)notification
{
if (self.callbackID) {
NSLog(@"%@",callbackID);
NSLog(@"sendSuccessNotification");
NSDictionary *dictionary = [NSDictionary dictionaryWithObject:@"testCallBack"
forKey:@"returnValue"];
CDVPluginResult *result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK
messageAsDictionary:dictionary
[result setKeepCallbackAsBool:YES];
[super writeJavascript:[result toSuccessCallbackString:self.callbackID]];
}
}
我可以在我的日志中看到调用了sendSuccessNotification但事件没有被触发,我确信我在javascript中做错了但问题是我不知道是什么。
在此先感谢您的任何帮助
答案 0 :(得分:0)
你的js确实看起来有点奇怪 - 我建议你按照这个教程(或者只是下载项目并从那里拿走它; - )
http://www.adobe.com/devnet/html5/articles/extending-phonegap-with-native-plugins-for-ios.html
答案 1 :(得分:0)
根据你的代码,我猜你使用的是PhoneGap / Cordova 1.5.0,对吧? 我问,因为版本1.6.0中已经更改了很多代码。
在我看来,以下行不正确:
self.callbackID = [arguments objectAtIndex:0];
您可以通过调试字符串值来自行检查。 根据我的信息,应使用以下语句来检索结果对象的正确回调ID:
self.callbackID = [arguments pop];
另外,请确保您已在Cordova.plist中注册了插件。 希望这能解决你的问题。
最佳, 马丁