1

次のコードがあります

NSString *myPath = [NSString stringWithFormat:@"../Documents/%@",@"bla.png"];
[imgView setImage:[UIImage imageNamed:myPath]];    // works fine
[self updateMyImage:[UIImage imageNamed:myPath]];  // loads another image as bla.png (works fine)
[imgView setImage:[UIImage imageNamed:myPath]];    // displays the old image, *not* the new one

画像は updateMyImage にロードされます: (私はそれを (シミュレーターのディスクから) 開き、それは「新しい」ものです) しかし、imgView は「古い」ものを表示します。キャッシュの問題だと思います。iOSは[UIImage imageNamed:@"bla.png"] 一度ロードしているので、これは同じものだと思います。キャッシュを「フラッシュ」して、イメージをリロードするように指示するにはどうすればよいですか?

4

1 に答える 1

0

setImage: (ご想像のとおり) キャッシュから読み込みます。「UIImage クラス リファレンス」(xcode のオーガナイザー ウィンドウ) で探します。

その数行下に答えあります。initWithContentsOfFile: メソッドを使用してください。したがって、画像を変更したら、次のようにします。

 NSString *myAbsolutePath = [NSString stringWithFormat:@"%@/%@", [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0],@"bla.png"]];
 UIImage *myImg = [[UIImage alloc] initWithContentsOfFile:myAbsolutePath];
 [imgView setImage:myImg];

これで、imgView に新しい画像が表示されます (img ファイルが myAbsolutePath に存在する限り)。

于 2012-12-17T15:27:46.207 に答える