Я немного разочарован API DropBox.Предполагается, что все будет просто и понятно, но мне еще предстоит найти простое и понятное объяснение того, как сделать простую синхронизацию.
Я следовал всем инструкциям, которые вы можете найти в readme, который поставляется с DropBox API.Чтобы проверить все это, я создал две кнопки для загрузки и загрузки файла из или в мой DropBox.Файлы находятся в папке с документами моего приложения.
Это прекрасно работает:
-(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];
}
Однако мне сейчас интересно, как добиться простой синхронизации.Прямо сейчас я могу загрузить и загрузить вручную.Но для синхронизации мне нужно:
- выяснить, является ли файл MyExample.txt в папке моего приложения или в папке DropBox более поздним
- , если текст вПапка приложения более новая: поместите ее в dropbox (переопределяя старый), т.е. вызовите мой метод DBupload
- , если текст в выпадающем списке более поздний: загрузите его в папку приложений, т.е. вызовите мой метод DBdownload
Возможно, я просто слишком глуп, но где-нибудь в DropBox подробно описывается, как выполнить эту довольно простую и прямолинейную задачу?
Я знаю, что есть это но это не дает никаких примеров кода.
Спасибо за любые предложения.
РЕДАКТИРОВАТЬ
ОК, поэтому я решил, что мой первый шаг - выяснить дату последнего измененияMyExample.txt, который находится в dropBox.
Я написал замечательный метод, названный 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*/
}
}
}
}
Я опубликую следующий шагоднажды мне удалось это сделать ...