1

我正在使用 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");
            }
        }
    }
}
4

1 回答 1

2

This is suspect:

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

This is always evaluating to true, which means to me either that self.metaData.lastModifiedDate is equal to fileDate or that fileDate is always the earlier of the two dates.

Honestly, I'm having trouble even parsing these conditionals. What happens if you try evaluating it another way? like this, for instance:

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");
}

Also, if the dates are equal, I assume you want to do neither, right?

于 2012-01-15T16:58:45.187 回答