0

Dropbox で機能を実行するために、PhoneGap アプリケーションから Objective C を呼び出しています。

私が抱えている問題は、ファイルが Dropbox から電話のローカル ファイル システムにダウンロードされる前に、JavaScript へのコールバックが起動していることです。

これは、Dropbox からのファイルのダウンロードを開始する私の Objective C メソッドです -

- (void) restore:(CDVInvokedUrlCommand*)command
{

    CDVPluginResult* pluginResult = nil;
    NSString* javaScript = nil;
    NSLog(@"Dropbox restore method is executing");

    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0]; // Get documents directory
    NSString *localPath = [documentsDirectory stringByAppendingPathComponent:@"PocketHealth-backup.bk"];
    NSString *dropBoxFile = @"/PocketHealth-backup.bk";

    [[self restClient] loadFile:dropBoxFile intoPath:localPath];

    pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK];
    javaScript = [pluginResult toSuccessCallbackString:command.callbackId];

    [self writeJavascript:javaScript];

}

Objective C には、Dropbox ファイルが電話にダウンロードされたときに実行されるメソッドがあります。Dropbox ファイルのダウンロードが完了した後に、このメソッドが出力する NSLog を取得します。問題は、JavaScript コールバックを返す前に、このイベントがいつ発生するかを知る必要があることです。

Dropbox ファイルのダウンロードが完了したときに実行されるメソッドは次のとおりです。

- (void) restClient:(DBRestClient*)client loadedFile:(NSString*)localPath 
{
    NSLog(@"File loaded into path: %@", localPath);
}

復元メソッドにある JavaScript コールバックを返す前に、Dropbox ファイルのダウンロードが完了するまで待つにはどうすればよいですか?

4

1 に答える 1

1

JavaScriptをメソッド内のローカル変数に書き込む代わりに、JavaScriptをrestoreiVarとしてクラスに追加し、メソッド内のへの呼び出しを削除して、から呼び出しwriteJavascript:ます。次に、実際のダウンロードが開始されたときではなく、ダウンロードが終了したときに呼び出されるはずです。restorewriteJavascriptrestClient:loadedFile:

- (void) restore:(CDVInvokedUrlCommand*)command
{

    CDVPluginResult* pluginResult = nil;
    NSLog(@"Dropbox restore method is executing");

    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0]; // Get documents directory
    NSString *localPath = [documentsDirectory stringByAppendingPathComponent:@"PocketHealth-backup.bk"];
    NSString *dropBoxFile = @"/PocketHealth-backup.bk";

    [[self restClient] loadFile:dropBoxFile intoPath:localPath];

    pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK];
    self.javaScript = [pluginResult toSuccessCallbackString:command.callbackId];
}

- (void) restClient:(DBRestClient*)client loadedFile:(NSString*)localPath 
{
    NSLog(@"File loaded into path: %@", localPath);
    [self writeJavascript:javaScript];
}
于 2012-09-28T19:17:38.993 に答える