应用退出之前iOS Dropbox同步

时间:2013-05-10 22:38:20

标签: ios objective-c dropbox

我正在尝试将在我的应用中创建的文件同步到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);
    }
  }
}

1 个答案:

答案 0 :(得分: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秒,然后再次关闭飞行模式,应将其重新启动。