5

DropBoxAPIに少し不満を感じています。それはすべて単純で単純なはずですが、単純な同期を行う方法の単純でわかりやすい説明にはまだ出くわしていません。

DropBoxAPIに付属のReadmeに記載されているすべての手順に従いました。全体をテストするために、DropBoxとの間でファイルをダウンロードおよびアップロードするための2つのボタンを作成しました。ファイルは私のアプリドキュメントフォルダーにあります。

これは見事に機能します:

    -(void) DBupload:(id)sender
{
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentsDirectory = [paths objectAtIndex:0]; // Get documents directory
    NSString *filePath = [documentsDirectory stringByAppendingPathComponent:@"MyExample.txt"];
    // NSError *error;
    [self.restClient uploadFile:@"MyExample.txt" toPath:@"/MyExamplePath" fromPath:filePath];
}

-(void) DBdownload:(id)sender
{
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentsDirectory = [paths objectAtIndex:0]; // Get documents directory
    NSString *filePath = [documentsDirectory stringByAppendingPathComponent:@"MyExample.txt"];
    NSError *error;
    [self.restClient loadFile:@"/myExamplePath/MyExample.txt" intoPath:filePath];
}

しかし、私は今、単純な同期を実現する方法を考えています。現在、手動でアップロードおよびダウンロードできます。しかし、同期するために必要なのは次のとおりです。

  • アプリのフォルダーまたはDropBoxフォルダーにあるMyExample.txtが最近のものかどうかを確認します
  • アプリのフォルダー内のtxtが新しい場合:ドロップボックスにドロップします(古いものをオーバーライドします)。つまり、DBuploadメソッドを呼び出します。
  • ドロップボックスのtxtが最近のものである場合:appsフォルダーにダウンロードします。つまり、私のDBdownloadメソッドを呼び出します。

おそらく私はあまりにも愚かですが、dropBoxは、このかなり単純で単純なタスクを達成する方法をどこかで詳しく説明していますか?

これがあることは知っていますが、実際にはコードサンプルは提供されていません。

提案をありがとう。


編集

さて、私の最初のステップは、dropBoxにあるMyExample.txtの最終更新日を見つけることだと思いました。

私はDBsyncと呼ばれる素晴らしいメソッドを作成しました。このメソッドでは、次のコマンドを入力するだけです。

 -(void) DBsync
{
    [self.restClient loadMetadata:@"/myExamplePath"];

}

これにより、メタデータを取得する次のメソッドが呼び出されます。これはこの投稿に対する提案された回答であり、何が起こっているのかを明確にするために少しコメントしました(私のような愚かな人がもっといる場合:

 - (void)restClient:(DBRestClient*)client loadedMetadata:(DBMetadata*)metadata {

    NSLog(@"restClient:loadedMetadata function called");

    NSEnumerator *e= [metadata.contents objectEnumerator]; // indexes files in dropbox?
    DBMetadata *dbObject;   // loads metadate we need, e.g. lastModifiedDated
    int numberOfFiles = [metadata.contents count]; // counts files in DropBox - I guess we don't really need this
    NSLog(@"numberOfFiles %i", numberOfFiles); 

    while ((dbObject = [e nextObject])) { // this goes through every single file in the DropBox
        if (!dbObject.isDirectory) { // this determines whether we are talking about a file or a folder
            NSString *fileName = [dbObject.path lastPathComponent]; // this puts the name of the last component, e.g. in /MyExamplePath/MyExample.txt = MyExample.txt into fileName
            NSLog(@"File which is currently being checked: %@", fileName);

            if ([fileName isEqualToString:@"MyExample.txt"]) {  

                NSLog(@"Found it: %@", fileName);
                NSLog(@"Date last modified: %@", dbObject.lastModifiedDate); 

                /* to do: call dbupload if dbObject.lastModifiedDate > than your local file*/
            }
        }
    }
}

なんとかできたら次のステップを投稿します...

4

2 に答える 2

2

あなたが探しているのはloadmetadataメソッドだと思います。テストされていない例を次に示します。

- (void)restClient:(DBRestClient*)client loadedMetadata:(DBMetadata*)metadata {
    NSEnumerator *e= [metadata.contents objectEnumerator];
    DBMetadata *dbObject;
    numberOfFiles = [metadata.contents count];
    while ((dbObject = [e nextObject])) {
    if (!dbObject.isDirectory) {
        NSString *fileName = [dbObject.path lastPathComponent];
        if (![fileName isEqualToString:@"MyExample.txt"]) {  
           /* call dbupload if dbObject.lastModifiedDate > than your local file*/
        }
    }
}
于 2011-05-10T15:59:04.720 に答える
0

列挙子は必要ありません。古き良きfor...ループを使用してください;)

- (void)restClient:(DBRestClient *)client loadedMetadata:(DBMetadata *)metadata {
    for (DBMetadata * child in metadata.contents) {
        if (!child.isDirectory) {
            NSString *fileName = [dbObject.path lastPathComponent];
            if (![fileName isEqualToString:@"MyExample.txt"]) {  
                /* call dbupload if dbObject.lastModifiedDate > than your local file*/
            }
        }
    }
}
于 2014-10-08T13:40:42.743 に答える