UIImageView に image-property を 3 回続けて設定すると (2 回で十分な場合もあります)、アプリがクラッシュします。アプリを閉じる前にメモリの警告が表示されることが何度かありましたが、ほとんどの場合は単に崩壊します。アプリはシミュレーターでクラッシュしないので、メモリの問題であると確信しています。
画像プロパティを設定するときに使用するコードは次のとおりです。
-(void)changeBgPictureTo:(UIImage *)img
{
[self.backgroundImage setImage:img];
}
UIImages は次の[UIImage imageWithData:]
メソッドで割り当てられます。
[UIImage imageWithData:[NSData dataWithContentsOfFile:[[NSBundle mainBundle] pathForResource:fileName ofType:type]]];
イメージは最初の 2 回は正しく設定されますが、3 回目でクラッシュします。特定の画像ファイルとは関係ありません。10種類の画像で試しましたが、違いはありません。
UIImageView で以前にロードした画像をアンロードするにはどうすればよいですか?
編集: さて、私はコード全体を求められたので、ここに行きます:
私は次のようなクラスで作業しています:
@interface MyImage : NSObject
{
UIImage* image;
int imgId;
NSArray* colors; //contains 'UIColor' objects.
}
@property (nonatomic, retain) UIImage* image;
@property (nonatomic, retain) NSArray* colors;
@property (nonatomic, readwrite) int imgId;
-(id)initWithFileName:(NSString*)fileName withType:(NSString*)type andId:(int)imgId andColors:(NSArray*)colorArray;
@end
これが初期化の実装です:
-(id)initWithFileName:(NSString*)fileName withType:(NSString*)type andId:(int)imageId andColors:(NSArray*)colorArray
{
self = [super init];
if (self)
{
self.colors = [NSArray arrayWithArray:colorArray];
self.imgId = imageId;
self.image = [UIImage imageWithData:[NSData dataWithContentsOfFile:[[NSBundle mainBundle] pathForResource:fileName ofType:type]]];
}
return self;
}
この呼び出しでループに追加される「MyImage」オブジェクトのリストを持つデータコントローラーがあります。
[self.myImages addObject:[[MyImage alloc] initWithFileName:[NSString stringWithFormat:@"0000%d", i] withType:@"jpg" andId:i andColors:colors]];
00001.jpg、00002.jpg、.....、00008.jpg という名前の 9 つの画像があります。
このデータ コントローラーには、次のようなメソッドがあります。
-(MyImage *)getImageWithId:(int)imgId
{
for (MyImage* img in self.myImages)
{
if (img.imgId == imgId)
return img;
}
return nil;
}
getImageWithId メソッドは次のように呼び出されます。
-(void)btnPushed:(id)sender
{
[self.delegate changeBgPictureTo:[self.imgDataController getImageWithId:((UIButton*)sender).tag]];
}
changeBgPictureTo メソッドは、イメージ プロパティの設定を行うメソッドです。
-(void)changeBgPictureTo:(MyImage *)img
{
NSLog(@"Setting image: %d", img.imgId);
[self.backgroundImage setImage:img.image];
}
ログには "Setting image: 0000X:" が 3 回出力されますが、3 回目の出力の直後にクラッシュします。