iOS上的Phonegap消防自定义事件

时间:2012-03-26 07:38:13

标签: ios events plugins cordova

我试图在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中做错了但问题是我不知道是什么。
在此先感谢您的任何帮助

2 个答案:

答案 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中注册了插件。 希望这能解决你的问题。

最佳, 马丁