2012-07-25 12 views
7

Mam pewne wartości generowane z mojego kodu natywnego, które chciałbym przekazać do phonegap. Dane te są generowane w czasie rzeczywistym i nie są bezpośrednio zależne od działań użytkownika poprzez gui phonegap. Mój kod natywny jest częścią wtyczki, którą zrobiłem.przekazywanie wartości z kodu natywnego iOS do cordova

Jaki jest najlepszy sposób podejścia do tego? Chcę mieć funkcję wysyłania danych w dowolnym czasie i mieć słuchacza po stronie cordova. Używam Cordova 1.5 z Xcode 4.3.

Oto co mam do tej pory:

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 

machnięcia .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]]; 
    } 

... 

Kod, który mam teraz, nie ma nic do robienia tego, co chcę. Naprawdę nie wiem, jak skonfigurować kod zarówno w wersji cordova, jak i natywnej.

+0

Podejście, które opisujesz, brzmi jak bardzo rozsądny sposób na zrobienie tego, czy jest to jedyne pytanie, czy masz problemy z jego uruchomieniem? – Brian

+0

@rhooligan Mam problem z uruchomieniem go, nie jestem obeznany z Objective-C i jego interakcją z phonegapem. Byłoby wspaniale mieć jakiś przykład. Dzięki! – mugetsu

+0

Czy możesz opublikować swój kod Celu-C, a następnie pokazać nam swój kod Cordova? Napisałem kilka wtyczek, gdy wciąż nazywało się PhoneGap i jest kilka konkretnych rzeczy, które musiałeś zrobić w pakiecie, jak również sekwencja inicjująca, którą musisz wywołać z JS. Od tego czasu system mógł ulec pewnym zmianom. – Brian

Odpowiedz

2

Brzmi jak trzeba być w stanie rozmawiać z powrotem w dół do PhoneGap od obiektywnej C, w takim przypadku powinny być w stanie używać coś takiego:

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

A jeśli masz funkcję JS jak „cześć "w index.html jak ten:

function hello(){return "hello";} 

jego sposób mówienia z powrotem do warstwy internetowej PhoneGap

1

utworzyć klasę typu CDVPlugin

importu #import w tej klasie

zainicjować sposób uchwytu .h klasy

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

i realizowania sposobu w klasie .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]; 
    } 
} 

w ten sposób przez self.commandDelegate twoje dane będą mogły dotrzeć do cordova klasy jeśli .js fi le hit (wywołuje) tę konkretną metodę, która jest inicjowana w klasie .h.

Powiązane problemy