Использование Dropbox iOS API и NSDate для загрузки или выгрузки файла не работает - PullRequest
1 голос
/ 15 января 2012

Я использую Dropbox iOS API для синхронизации между различными устройствами. Используя следующий код, я пытаюсь сравнить даты, когда файл был изменен, чтобы либо загрузить / загрузить более новый файл. Проблема в том, что это просто загрузка, а не загрузка. Есть намеки?

- (void)dropboxAuth {
    if (![[DBSession sharedSession] isLinked]) {
        [[DBSession sharedSession] link];
    }
    else {
        NSString *filename = @"NotesList.plist";
        NSString *destDir = @"/";
        NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory , NSUserDomainMask, YES);
        NSString *documentsDir = [paths objectAtIndex:0];
        NSString *address = [documentsDir stringByAppendingPathComponent:@"NotesList.plist"];

        [[self restClient] loadMetadata:@"/"];

        if([[NSFileManager defaultManager] fileExistsAtPath:address]) {
            NSDictionary *dictionary = [[NSFileManager defaultManager] attributesOfItemAtPath:address error:&error];
            NSDate *fileDate =[dictionary objectForKey:NSFileModificationDate];

            if ([[fileDate earlierDate:self.metaData.lastModifiedDate]isEqualToDate:fileDate]) {
                [self.restClient loadFile:[NSString stringWithFormat: @"%@/%@", destDir, filename]
                                 intoPath:address];
                NSLog(@"Downloading");
            }
            else if ([[self.metaData.lastModifiedDate earlierDate:fileDate] isEqualToDate:self.metaData.lastModifiedDate]) {
                [[self restClient] uploadFile:filename toPath:destDir fromPath:address];
                NSLog(@"Uploading");
            }
        }
    }
}

1 Ответ

2 голосов
/ 15 января 2012

Это подозрительно:

if ([[fileDate earlierDate:self.metaData.lastModifiedDate]isEqualToDate:fileDate]) {

Это всегда имеет значение true, что для меня означает, что либо self.metaData.lastModifiedDate равно fileDate, либо fileDate всегда является более ранним из двухдаты.

Честно говоря, у меня проблемы даже с анализом этих условий.Что произойдет, если вы попытаетесь оценить это по-другому?например, вот так:

if (nil == fileDate || fileDate.timeIntervalSinceReferenceDate < self.metaData.lastModifiedDate.timeIntervalSinceReferenceDate)
{
    [self.restClient loadFile:[NSString stringWithFormat: @"%@/%@", destDir, filename]
                         intoPath:address];
    NSLog(@"Downloading");
}
else if (nil != fileDate && fileDate.timeIntervalSinceReferenceDate > self.metaData.lastModifiedDate.timeIntervalSinceReferenceDate) {
    [[self restClient] uploadFile:filename toPath:destDir fromPath:address];
    NSLog(@"Uploading");
}

Кроме того, если даты совпадают, я полагаю, вы не хотите делать ни того, ни другого, верно?

...