2012-07-25 20 views
7

Tengo algunos valores generados desde mi código nativo que me gustaría pasar a phonegap. Estos datos se generan en tiempo real y no se ven directamente influenciados por las acciones del usuario a través de la guía telefónica. Mi código nativo es parte de un complemento que hice.pasando el valor del código nativo de iOS a cordova

¿Cuál es la mejor manera de abordar esto? Quiero tener una función para enviar datos en cualquier momento y tener un oyente en el lado de cordova. Estoy usando Cordova 1.5 con Xcode 4.3.

Esto es lo que tengo hasta ahora:

swipe.js:

var swipe={ 
    callNativeFunction: function (success, fail, resultType) { 
    return Cordova.exec(success, fail, 
         "ca.swipe", 
         "nativeFunction", 
         [resultType]); } 

}; 

index.html:

... 

function callNativePlugin(returnSuccess) { 
      swipe.callNativeFunction(nativePluginResultHandler, nativePluginErrorHandler, returnSuccess); 
     } 

     function nativePluginResultHandler (result) { 
      alert("SUCCESS: \r\n"+result); 
     } 

     function nativePluginErrorHandler (error) { 
      alert("ERROR: \r\n"+error); 
     } ... <body onload="onBodyLoad()">  <h1>Hey, it's Cordova!</h1> 

     <button onclick="callNativePlugin('success');">Success</button> 
     <button onclick="callNativePlugin('error');">Fail</button> 

    </body> ... 

swipe.h:

... 
@interface swipe : CDVPlugin 
- (void) nativeFunction:(NSMutableArray*)arguments withDict:(NSMutableDictionary*)options; 
@end 

banda magnética .m:

... 
- (void) nativeFunction:(NSMutableArray*)arguments withDict:(NSMutableDictionary*)options { 

    NSLog(@"Hello, this is a native function called from PhoneGap/Cordova!"); 

    //get the callback id 
    NSString *callbackId = [arguments pop]; 
    NSString *resultType = [arguments objectAtIndex:0];  
    NSMutableArray *GlobalArg=arguments; 

    CDVPluginResult *result; 
    if ([resultType isEqualToString:@"success"]) { 
     result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsString: @"Success :)"]; 
     //writes back the smiley face to phone gap. 
     [self writeJavascript:[result toSuccessCallbackString:callbackId]]; 
    } 

... 

El código que tengo ahora no tiene nada para hacer lo que quiero. No estoy seguro de cómo configurar el código en cordova y nativo.

+0

El enfoque que describes parece una forma muy razonable de hacerlo, ¿es la única pregunta o tienes problemas para hacerlo funcionar? – Brian

+0

@rhooligan Tengo problemas para hacerlo funcionar, no estoy muy familiarizado con Objective-C y su interacción con Phonegap. Sería genial tener un ejemplo de algún tipo. ¡Gracias! – mugetsu

+0

¿Puedes publicar tu código de Objective-C y luego mostrarnos tu código de Cordova? Escribí algunos complementos cuando aún se llamaba PhoneGap y hay algunas cosas específicas que tenía que hacer en el paquete, así como también una secuencia de inicio a la que tenía que llamar desde JS. Sin embargo, el sistema puede haber sufrido algunos cambios desde entonces. – Brian

Respuesta

2

Suena como que necesita para ser capaz de hablar de nuevo a PhoneGap del objetivo C, en cuyo caso usted debe ser capaz de usar algo como:

NSString *jsResult = [theWebView stringByEvaluatingJavaScriptFromString:@"hello()"]; 
NSLog(@"jsResult=%@",jsResult); 

Y si tiene una función JS como "hola "en su index.html así:

function hello(){return "hello";} 

Es una manera de hablar de nuevo a su capa de tela PhoneGap

1

crear una clase de tipo CDVPlugin

import importación en esa clase

inicializar un método de controlador de clase .h

- (void)Device:(CDVInvokedUrlCommand *)command; 

y poner en práctica el método en la clase .m

- (void)openDevice:(CDVInvokedUrlCommand *)command{ 
    CDVPluginResult *pluginResult = nil; 
    BOOL checkOpenDevice=NO; 
    pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsBool:checkOpenDevice]; 
     [self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId]; 
    } 
} 

de esta manera a través self.commandDelegate tus datos podrán llegar a la clase cordova si el .js fi le hit (llamadas) ese método particular que se inicializa en la clase .h.

Cuestiones relacionadas