2016-11-03 5 views
0

ViewController Aの辞書からURLとしてイメージを取得していて、その辞書をViewController BIに渡しました。ユーザーがイメージを更新した場合は、更新されたイメージが表示されます。イメージと私はそれのために次のコードをやっています.Kindlyチェックし、なぜそれが望むように動作していないと、すべての場合にのみ、前の画像を示してください。イメージを更新して辞書に保存する

-(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]; 
     } 
    } 
+0

を、あなたは、最初のURLから画像をダウンロードすることがNSDataのだ作成し、ハッシュに変換する必要があります。選択したローカルイメージと同じ操作を行います。今度はハッシュを比較し、同じであれば画像は同じです。 – NSNoob

+0

また、サーバー上のイメージに、イメージのデバイスIDとローカルIDのハッシュを指定し、イメージURLに含めることもできます。選択したイメージのlocalIdentifierとデバイスのIDに対して、urlのハッシュ文字列と生成されたハッシュを比較します。それらが同じ場合、画像は同じです。私は個人的には、最初に画像をダウンロードする気にならないように、2番目の方法に行きます – NSNoob

答えて

0

問題は、この行であるように思わ:

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

あなたが[_detailsDictionary valueForKey:@"ProfilePictureUrl"]で、UIImageは何か、_profileImageView.imageを比較しようとしている、辞書から来て、NSURLインスタンスものです。

代わりに、選択した画像とprofileImageが同じかどうかを確認することができます。ただ呼び出す、以前にキャッシュされた画像をクリアする

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

[[NSURLCache sharedURLCache] removeAllCachedResponses]; 

は、この情報がお役に立てば幸い!

+0

私は実際にキャッシュに画像を保存しました。どのようにキャッシュをクリアすることができますか? – FreshStar

+0

どのようなキャッシュですか?いくつかのコードを表示できますか? – dirtydanee

1

@Dirtydanee、彼は絶対に正しいです、あなたはUrlとUIImageの間に互換性のない比較を行っています。だから次のコードでこれを修正してください。

NSData *data1 = UIImagePNGRepresentation(previousImage); 
NSData *data2 = UIImagePNGRepresentation(currentImage); 

if([data1 isEqualToData:data2]) { 
    //Do something 
} else { 
    //Do something 
} 

イメージをNSDataに変換して比較します。 次のリンクをご覧くださいビットごとの比較したい場合は、次の画像を比較するために

Generate hash from UIImage

関連する問題