1

我正在尝试将在我的应用程序中创建的文件同步到 Dropbox,但似乎同步仅在应用程序退出后发生,而不是在应用程序中不同文件夹的位置之间创建和移动文件或创建/删除文件时实时同步。例如,我必须拨打某个电话吗?感谢你的帮助!

以下是我用于同步的代码:

-(void)createFilePathinFolder:(NSString *)folderName FileName:(NSString *)fileName {

NSFileManager *fileManager = [NSFileManager defaultManager];

NSString *folder = [self localDocumentsRootPath];

if (![folderName isEqualToString:@"root"]) {
    folder = [folder stringByAppendingPathComponent:folderName];
}

NSString *file = [folder stringByAppendingPathComponent:fileName];

if (![fileManager fileExistsAtPath:file]) {
    [fileManager createFileAtPath:file contents:[@"0" dataUsingEncoding:NSUTF8StringEncoding] attributes:nil];
}

//Insert to FileTable
[[DBHelper shared]insertToFileTableWithFolder:folderName FileName:fileName MetaFileName:nil Tag:nil Title:nil];

if ([NetworkHelper shared].canSyncWithCloud) {
    NSString *filePathStr = [folderName stringByAppendingPathComponent:fileName];;

    if ([folderName isEqualToString:@"root"]) {
        filePathStr = fileName;
    }

    DBPath *filePath = [[DBPath root] childPath:filePathStr];
    DBError *error;
    DBFile *destFile =[[DBFilesystem sharedFilesystem] createFile:filePath error:&error];

    NSData *fileData = [NSData dataWithContentsOfFile:file];

    [destFile writeData:fileData error:&error];

    //[destFile writeContentsOfFile:file shouldSteal:NO error:&error];

    [destFile close];

    if (error) {
        NSLog(@"Error when creating file %@ in Dropbox, error description:%@", fileName, error.description);
    }
  }
}
4

1 回答 1

0

您的错误检查都是错误的。你的代码应该更像这样:

DBPath *filePath = [[DBPath root] childPath:filePathStr];
DBError *error = nil;
DBFile *destFile =[[DBFilesystem sharedFilesystem] createFile:filePath error:&error];
if (destFile) {
    NSData *fileData = [NSData dataWithContentsOfFile:file];
    if (![destFile writeData:fileData error:&error]) {
        NSLog(@"Error when writing file %@ in Dropbox, error description: %@", fileName, error);
    }
    [destFile close];
} else {
    NSLog(@"Error when creating file %@ in Dropbox, error description: %@", fileName, error);
}

该文件应立即与您拥有的代码同步。这假设您已将您的应用程序正确链接到一个帐户和所有。

您使用的是哪个版本的 Dropbox Sync API?1.0.7 有一些潜在的网络问题。我有一个 1.0.8 的测试版,似乎可以解决这些问题。您可能需要等到 1.0.8 出来。

您可以验证 Dropbox 是否已挂起。在调试器中运行您的应用程序时,请在文件创建后等待一分钟。如果文件没有出现,请在调试器中暂停您的应用程序并查看所有线程。您应该会看到一个或多个与 Dropbox 相关的线程。如果一个看起来被引用阻止了,dbx_cfhttp_request那么你在 Dropbox 框架中遇到了一个错误。将您的设备置于飞行模式 10-15 秒,然后再次关闭飞行模式应该让它重新启动。

于 2013-05-10T22:49:35.173 回答