0

以下のコードは、デバイス上で実行するとクラッシュ (EXC_BAD_ACCESS) を引き起こす場合があります。シミュレーターでは決してありません。

それを再現するために、テーブルビューコントローラーにモーダルビューコントローラーを重ね続けています。これは通常、モーダル ビュー コントローラーが閉じられたときに発生します。

なぜこれが起こるのですか?

CGContextRef context = UIGraphicsGetCurrentContext();

//set the background of the cell
[self.backgroundColor set];
CGContextFillRect(context, rect);

// get cached image
UIImage *image = [[ImageUtil sharedInstance] getImageByRouteType:route.type];
CGSize imageSize = CGSizeMake(IMAGE_WIDTH, IMAGE_WIDTH);
// DEBUGGER STOPS ON THIS NEXT LINE, image object is fine though
[image drawInRect:CGRectMake(0, 0, imageSize.width, imageSize.height)];

[...]

ありがとう

4

1 に答える 1

1

NSOperationQueue のような複数のトレッド状況で drawInRect を使用する場合は、ロックを使用して、「drawInRect」が複数のスレッドで呼び出されないようにしてください。同様の問題に遭遇し、この方法で解決しました。

@synchronized([UIImage class]){
    UIGraphicsBeginImageContext(newSize);
    CGRect rect = CGRectMake(0.0, 0.0, newSize.width, newSize.height);
    [self drawInRect: rect];
    newImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

} 
于 2011-01-24T05:52:57.850 に答える