0

我是 iPhone 新手请告诉我任何人如果我想第一次下载 100 张图片,然后第二次在所有 100 张图片中只有 10 张图片会被修改,我想覆盖那 10 张图片怎么做?

4

3 回答 3

1

在第一次同步存储同步时间。并在下一次同步中将这个时间传递给 web 服务。因此,在此响应中,您将仅获得在上次同步时间后更新的那些记录,并且仅更新该图像。但为此,您必须在 Web 服务中添加时间标签。

于 2013-09-12T12:23:29.477 回答
0

如果服务器响应提供除 url 之外的图像属性,例如让我们考虑具有唯一 ID 的图像。然后将 imageurl 和图像 id 保存到字典中,同时保存第一次下载期间的所有图像。

如果服务器进行了修改,那么在该响应中,您将使用某些属性获得修改后的图像。现在存储修改后的图像 ID 并下载它们。

您可以按照此处回答的 SO 问题进行操作。

iOS - 仅在修改后下载文件(NSURL 和 NSData)

其中有代码

我最终使用这种方法来检测文件上的修改日期:*在这里找到

-(bool)isThumbnailModified:(NSURL *)thumbnailURL forFile:(NSString *)thumbnailFilePath{
    // create a HTTP request to get the file information from the web server
    NSMutableURLRequest* request = [NSMutableURLRequest requestWithURL:thumbnailURL];
    [request setHTTPMethod:@"HEAD"];

    NSHTTPURLResponse* response;
    [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:nil];

    // get the last modified info from the HTTP header
    NSString* httpLastModified = nil;
    if ([response respondsToSelector:@selector(allHeaderFields)])
    {
        httpLastModified = [[response allHeaderFields]
                            objectForKey:@"Last-Modified"];
    }

    // setup a date formatter to query the server file's modified date
    // don't ask me about this part of the code ... it works, that's all I know :)
    NSDateFormatter* df = [[NSDateFormatter alloc] init];
    df.dateFormat = @"EEE',' dd MMM yyyy HH':'mm':'ss 'GMT'";
    df.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US"];
    df.timeZone = [NSTimeZone timeZoneWithAbbreviation:@"GMT"];

    // get the file attributes to retrieve the local file's modified date
    NSFileManager *fileManager = [NSFileManager defaultManager];
    NSDictionary* fileAttributes = [fileManager attributesOfItemAtPath:thumbnailFilePath error:nil];

    // test if the server file's date is later than the local file's date
    NSDate* serverFileDate = [df dateFromString:httpLastModified];
    NSDate* localFileDate = [fileAttributes fileModificationDate];

    NSLog(@"Local File Date: %@ Server File Date: %@",localFileDate,serverFileDate);
    //If file doesn't exist, download it
    if(localFileDate==nil){
        return YES;
    }
    return ([localFileDate laterDate:serverFileDate] == serverFileDate);
}
于 2013-09-12T11:26:22.807 回答
0

希望这会有所帮助。

首先,您必须跟踪哪些图像被修改,而不是只下载那些。

为此,您有两种方法:

1)您可以在服务器端设置不同的图像名称,当它被修改时,而不是在下载时首先调用一个列出图像名称的网络服务。然后将这些名称与下载的图像名称(即在您的文档目录中)进行比较。如果它们与下载不同,则不然。

2)您可以制作存储先前下载图像信息的本地数据库,并在第二次下载时比较这些值。如果与下载不同,则不然。

于 2013-09-12T11:31:05.913 回答