【问题标题】:iOS - getting image with AFNetworking keeps cacheiOS - 使用 AFNetworking 获取图像保持缓存
【发布时间】:2014-08-06 10:57:57
【问题描述】:

在我的应用程序中,我使用的是 RESTKit,所以我的 AFNetworking 版本不是最新的。我不确定如何检查它的版本。 我想从我的服务器下载一张图片,因为响应是 jpg 文件,所以我使用的是 AFNetworking。在第一次下载图像时,它运行良好。然后我删除服务器上的图像并上传一个具有相同名称的新图像。然后,如果我删除应用程序中的图像并重新下载它。在这种情况下,我仍然会得到第一次下载时的旧图片。

这是我的代码:

AFHTTPClient *client = [AFHTTPClient clientWithBaseURL:[NSURL URLWithString:@"http://myserver.com"]];
[client setAuthorizationHeaderWithUsername:name password:password];

[client getPath:[NSString stringWithFormat:@"profile-images/%@.jpg", user.name] parameters:@{} success:^(AFHTTPRequestOperation *operation, id responseObject) {
        NSLog(@"SUCCES");
        NSData *imageData = responseObject;
        self.tmpImage = [UIImage imageWithData:imageData];

    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
        NSLog(@"FAIL");
        self.tmpImage = [UIImage imageNamed:@"myImage.png"];
    }];

在我看来,该应用“记住”了我在下载图像时向服务器发送的第一个请求。然后当我重新下载它时,它给了我旧照片。有人知道怎么解决吗?

【问题讨论】:

  • 代码是否工作。

标签: ios httprequest restkit afnetworking


【解决方案1】:

我终于可以使用NSMutableURLRequest 来解决这个问题。创建请求时,我将cachePolicy 设置为NSURLRequestReloadIgnoringLocalCacheData。含义:request.cachePolicy = NSURLRequestReloadIgnoringLocalCacheData;

这里是向服务器发送请求的代码:

AFHTTPClient *client = [AFHTTPClient clientWithBaseURL:[NSURL URLWithString:@"http://server.com"]];
[client setAuthorizationHeaderWithUsername:name password:password];

NSMutableURLRequest *request = [client requestWithMethod:@"GET" path:[NSString stringWithFormat:@"profile-images/%@.jpg", user.name] parameters:nil];

request.timeoutInterval = 10;
request.cachePolicy = NSURLRequestReloadIgnoringLocalCacheData;

AFImageRequestOperation *operation;
operation = [AFImageRequestOperation imageRequestOperationWithRequest:request imageProcessingBlock:^UIImage *(UIImage *image) {
        NSLog(@"block");
        return image;
} success:^(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image) {
        NSLog(@"SUCCES");
        self.tmpImage = image;
} failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error) {
        NSLog(@"FAIL");
        self.tmpImage = [UIImage imageNamed:@"myImage.png"];
}];

[operation start];

【讨论】:

    【解决方案2】:

    当您在服务器上上传图像时,首先将图像保存在每次相同名称的文档目录中。在代码图像中保存名称为@""Profile1.jpeg"

    - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
    {
    
        UIImage *img = [info objectForKey:UIImagePickerControllerOriginalImage];
    
        img = [self imageWithImage:img scaledToSize:CGSizeMake(70, 70)];
    
        [btn_Photo setImage:img forState:UIControlStateNormal];
    
        NSData *webData = UIImageJPEGRepresentation(img, 0.5);
    
        NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    
        NSString *documentsDirectory = [paths objectAtIndex:0];
    
        self.savedImagePath = [documentsDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@"%@",@"Profile1.jpeg"]];
    
        [webData writeToFile:self.savedImagePath atomically:YES];
    
        [picker dismissViewControllerAnimated:YES completion:^{
    
            //[[UIApplication sharedApplication] setStatusBarHidden:YES];
    
        }];
    }
    

    使用新的ANetworking上传图片如下代码New AFNetworking

    AFHTTPRequestOperationManager *Manager = [AFHTTPRequestOperationManager manager];
    
    [Manager POST:str_Submit parameters:parameters constructingBodyWithBlock:^(id<AFMultipartFormData> formData)
     {
    
            NSURL *filePath_Profile_Logo = [NSURL fileURLWithPath:self.savedImagePath];
            [formData appendPartWithFileURL:filePath_Profile_Logo name:@"userfile" error:nil];
    
     }
    success:^(AFHTTPRequestOperation *operation, id responseObject)
     {
         NSLog(@"Success");
    
    
     }
    failure:^(AFHTTPRequestOperation *operation, NSError *error)
     {
         NSLog(@"Fail")
     }];
    

    请在上传之前检查您的文档目录路径图像是否更改。 请

    【讨论】:

    • 我可以请求不使用缓存吗?我要下载最近更新的头像
    • 您的个人资料图片也在缓存中,并使用文档目录路径使用它。
    • 我希望我的第二次下载不使用缓存。有可能吗?
    • 第二次没有得到。因为当从 iphone 中删除应用程序时,一切都清楚了。
    • 对不起,我不明白你的回答。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-24
    • 1970-01-01
    • 1970-01-01
    • 2016-02-08
    • 1970-01-01
    • 1970-01-01
    • 2014-04-14
    相关资源
    最近更新 更多