2012-03-26 38 views
2

我試圖在iOS上的觸發器中觸發自定義事件。好吧,我迄今爲止所做的: 我創建了一個自定義插件,我可以從Javascript調用我的插件,並且所有工作都正常。基本上插件顯示一個ModalViewController呈現一些本地功能 ,如錄製和編輯視頻,一旦用戶完成,我會將視頻上傳到YouTube。我想在下載完成時發佈一個事件,但目前我無法做到這一點。
這是我使用的代碼的一部分:
在我的index.html我有這個功能,通過點擊一個按鈕觸發,(我不是一個JavaScript開發)nativeFunction基本上叫我的自定義插件。iOS上的Phonegap觸發自定義事件

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

根據你的代碼,我猜你正在使用PhoneGap/Cordova 1.5.0,對嗎? 我在問,因爲很多代碼已在版本1.6.0中進行了更改。

在我看來,下面一行是不正確的:

self.callbackID = [arguments objectAtIndex:0]; 

您可以通過調試的字符串值檢查這個自己。 根據我的信息下面的語句應該被用來檢索正確的回調ID爲您的結果對象:

self.callbackID = [arguments pop]; 

此外,請確保您已註冊的插件,在Cordova.plist。 希望這可以解決您的問題。

最好, 馬丁

相關問題