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 がハングしているかどうかを確認できます。デバッガーでアプリを実行している間、ファイルが作成されてから 1 分ほど待ちます。ファイルが表示されない場合は、デバッガーでアプリを一時停止し、すべてのスレッドを確認してください。ドロップボックス関連のスレッドが 1 つ以上表示されます。への参照でブロックされているように見える場合dbx_cfhttp_requestは、Dropbox フレームワークにバグがあります。デバイスを 10 ~ 15 秒間機内モードにしてから、再び機内モードをオフにすると、ギアが元に戻ります。

于 2013-05-10T22:49:35.173 に答える