objective-c - 使用 Dropbox iOS API 和 NSDate 下载或上传文件不起作用

标签 objective-c ios compare nsdate dropbox-api

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

最佳答案

这是可疑的:

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

此外,如果日期相同,我想您两者都不想做,对吗?

关于objective-c - 使用 Dropbox iOS API 和 NSDate 下载或上传文件不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8871345/

相关文章:

ios - 由于每个索引都在不同的 indexPath 中,如何删除 TableView 单元格中的 ">"并删除单元格?

iOS:这是检查 JSON 字典对象是否为 NSString 的好方法吗?

java - 数组比较字符串

MySQL通过group by过滤掉子集

iOS MS Powerpoint - 打开应用程序文件(离线)

ios - UITableViewCell 内容在单独重新加载单元格时闪烁

ios - 在 Objective-C 中将货币字符串转换为 float

ios - 在 View 上动画 UIIMageView Alpha 确实加载

ios - NSPredicate 对象模型数组过滤器无法在 Swift 4.0 中崩溃

Javascript/jQuery 将输入值与数组进行比较