1

DBRestClient を呼び出して特定のパスにファイルをダウンロードすると、API は読み込み関数を呼び出しません。

例えば:

- (void) downloadFiles:(NSMutableArray *)files
{
    NSLog(@"%@", files);
    itemsToBeDownloaded = [[NSMutableArray alloc] initWithArray:files];
    restClient = [self restClient];
    for (NSString *string in files)
    {
        NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
        NSString *documentsDirectory = [paths objectAtIndex:0];
        NSString *filePath = [documentsDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@"/Dropbox%@", string]];
        [restClient loadFile:string intoPath:filePath];
    }
}

files返品の印刷( "/Blank.pdf" )

string返品の印刷/Blank.pdf

filePath返品の印刷/var/mobile/Applications/0C506400-7142-41E2-9F3D-0965985CED9E/Documents/Dropbox/Blank.pdf

したがって、関数が呼び出され、ダウンロードするファイルとそのパスが認識されます。

ただし、 を呼び出し[restClient loadFile:string intoPath:filePath];ても何も起こりません。私はデリゲートメソッドを持っています:

- (void) restClient:(DBRestClient *)client loadedFile:(NSString *)destPath
{
    NSLog(@"Called!");
}

- (void) restClient:(DBRestClient *)client loadedFile:(NSString *)destPath contentType:(NSString *)contentType
{
     NSLog(@"Called!");
}

- (void) restClient:(DBRestClient *)client loadedFile:(NSString *)destPath contentType:(NSString *)contentType metadata:(DBMetadata *)metadata
{
    NSLog(@"%@", destPath);
    NSLog(@"%@", contentType);
    NSLog(@"%@", metadata);
}

- (void) restClient:(DBRestClient *)client loadFileFailedWithError:(NSError *)error
{
    NSLog(@"Error downloading file: %@", error);
}

Called!ステートメントは生成されません。RestClient がデータをダウンロードしていないようです。

別の注意:restClient = [self restClient];有効な DBRestClient を返すので、それが有効であることはわかっています。ただし、ファイルをロードする呼び出しは呼び出されていません。

への呼び出しが行われていない特定の理由はありloadFile:ますか? メタデータを問題なくロードしています。

編集: loadMetadata: at への呼び出しは、loadMetadata デリゲート メソッドを呼び出しstringません。

編集 2:以下のコードは、ファイルの配列がどのように要求されているかを示しています。

- (void) downloadFiles
{
    NSMutableArray *filesToDownload = [[NSMutableArray alloc] init];
    for (int i = 0; i < [[itemsToDownload allKeys] count]; ++i)
    {
        for (NSString *string in [itemsToDownload objectForKey:[[itemsToDownload allKeys] objectAtIndex:i]])
        {
            [filesToDownload addObject:[NSString stringWithFormat:@"%@%@", [[itemsToDownload allKeys] objectAtIndex:i], string]];
        }
    }
    [dropboxController downloadFiles:filesToDownload];
}
4

2 に答える 2

4

それで、私は問題全体を理解しました。バックグラウンド スレッドから残りのクライアント メソッドを呼び出すことはできません。メイン スレッドで呼び出す必要があります。

于 2013-05-15T20:03:39.490 に答える
0

最初はドロップボックスで間違ったパスを呼び出していると思いましたが、イベントの場合はエラーメッセージが表示されるはずです。

restClientパスが間違っていてもデリゲート メソッドを返す場合は、- (void)restClient:(DBRestClient*)client loadFileFailedWithError:(NSError*)error呼び出されているはずです。

あなたrestClientが正しく開始されているとは思えません。

あなたの.hファイルで:

#import <DropboxSDK/DropboxSDK.h>
@property (nonatomic, strong) DBRestClient *restClient;

in.your.m ファイル:

#import <DropboxSDK/DropboxSDK.h>
@synthesize restClient = _restClient;
- (DBRestClient *)restClient {
    if (!_restClient) {
        _restClient =
        [[DBRestClient alloc] initWithSession:[DBSession sharedSession]];
        _restClient.delegate = self;
    }
    return _restClient;
} 

次に、あなたに電話してみてください

[[self restClient] loadFile:@"string" intoPath: @"pathstring" ];

于 2013-05-15T17:00:21.403 に答える