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: atstring不调用loadMetadata委托方法。

编辑 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

首先,我认为您在 Dropbox 中调用了错误的路径,但如果发生事件,您应该会收到错误消息。

如果您restClient返回委托方法,即使路径错误,您- (void)restClient:(DBRestClient*)client loadFileFailedWithError:(NSError*)error也应该被调用。

我怀疑你restClient的启动是否正确。

在您的 .h 文件中:

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

在.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 回答