更新图像并保存在字典中



我从ViewController A上的字典中获取图像作为url,我已经将该字典传递给ViewController b。我想如果用户更新了图像,那么它会显示更新的图像,否则它会显示以前的图像,我正在为它做以下代码。请检查并告诉为什么它不按预期工作,并只在每种情况下显示以前的图像。

-(void)showUserImage:(NSURL*)imgUrl
{
    [ConnectionManager setSharedCacheForImages];

    NSURLRequest *request = [[NSURLRequest alloc] initWithURL:imgUrl];
    NSURLSession *session = [ConnectionManager prepareSessionForRequest];
    NSCachedURLResponse *cachedResponse = [[NSURLCache sharedURLCache] cachedResponseForRequest:request];
    if (cachedResponse.data) {
        UIImage *downloadedImage = [UIImage imageWithData:cachedResponse.data];
        dispatch_async(dispatch_get_main_queue(), ^{
            _profileImageView.image = downloadedImage;
        });
    } else {
        NSURLSessionDataTask *task = [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
            NSHTTPURLResponse *res = (NSHTTPURLResponse *)response;
            if(res.statusCode == 200){
                dispatch_async(dispatch_get_main_queue(), ^{
                    _profileImageView.image = [UIImage imageWithData:data];
                });
            }
        }];
        [task resume];
    }

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingImage:(UIImage *)image editingInfo:(NSDictionary *)editingInfo {
        if(_profileImageView.image == [_detailsDictionary valueForKey:@"ProfilePictureUrl"]) {
            NSLog(@"Th url of image is %@",[_detailsDictionary valueForKey:@"ProfilePictureUrl"]);
        }
        else {
            _profileImageView.image = image;
            UIImage *updatedImage =  _profileImageView.image;
            NSData *imageData = UIImageJPEGRepresentation(updatedImage, 100);
            NSString *strEncoded = [imageData base64EncodedStringWithOptions:0];
            [_detailsDictionary setObject:strEncoded  forKey:@"ProfilePictureUrl"];
            [self dismissViewControllerAnimated:YES completion:nil];
        }
    }

@Dirtydanee,他是绝对正确的,你正在做Url和UIImage之间不兼容的比较。所以请用下面的代码纠正这个错误。

NSData *data1 = UIImagePNGRepresentation(previousImage);
NSData *data2 = UIImagePNGRepresentation(currentImage);
if([data1 isEqualToData:data2]) {
  //Do something
} else {
  //Do something
}

将图像转换为NSData并比较数据。如果您想要逐位比较,请查看以下链接:

从UIImage生成散列

问题似乎在这一行:

if(_profileImageView.image == [_detailsDictionary valueForKey:@"ProfilePictureUrl"]) {

你试图比较_profileImageView.image,什么是UIImage,与[_detailsDictionary valueForKey:@"ProfilePictureUrl"],什么是NSURL实例,来自字典。

你可以做的是,检查所选择的图像和profileImage是否相同。

if(_profileImageView.image == image) {
// etc..

要清除先前缓存的图像,只需调用:

[[NSURLCache sharedURLCache] removeAllCachedResponses];

希望这对你有帮助!

最新更新