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*/
}
}
}
}
なんとかできたら次のステップを投稿します...