iOS アプリのクラッシュ (EXC_BAD_ACCESS) を修正するための助けを感謝します。利用可能な最新の iOS 8.1.2 を使用してアプリを iOS 8 に更新してから、この問題が発生しています。同じコードが iOS 7.x でも正常に機能しました。
私のアプリのビューの 1 つはUICollectionView
. コレクション ビューのすべてのセルには画像が表示されます。画像は動的にレンダリングされ、新しいコンテンツが利用可能になると数分ごとに変化します。
セルの左上には、コレクション ビューのそのセルのテキスト ラベル/タイトルも表示されます。セル画像の色に基づいてテキスト ラベルを読みやすくするために、セルの左上にある画像の色を決定するコード (以下を参照) を用意しました。その色に基づいて、セルのテキスト ラベル/タイトル (セル内の画像の上に表示される) に白または黒の色を使用します。
以下はコードスニペットです。非常に頻繁に、次のコード行でクラッシュ EXC_BAD_ACCESS クラッシュが発生します。
CGContextDrawImage(context, CGRectMake(0, 0, 1, 1), imageRef);
Xcodeに表示されるエラーログ...
: ImageIO: CGImageReadGetBytesAtOffset : * エラー * CGImageSource はデータ サイズ: 684918 で作成されました - 現在のサイズは 526399 のみです
: ImageIO: CGImageReadGetBytesAtOffset : * エラー * CGImageSource はデータ サイズ: 203207 で作成されました - 現在のサイズは 199641 のみです
コードは以下のとおりです。この問題の解決にご協力いただきありがとうございます。
-(UIColor *) averageColorOfImageTitleArea {
//CGRect croppedImageRect = CGRectMake (6,0,100,29);
CGRect croppedImageRect = CGRectMake (0,0,1,1);
CGImageRef imageRef = CGImageCreateWithImageInRect (self._collectionViewImage.image.CGImage,croppedImageRect);
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
unsigned char rgba[4];
CGContextRef context = CGBitmapContextCreate(rgba, 1, 1, 8, 4, colorSpace, kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big);
CGContextDrawImage(context, CGRectMake(0, 0, 1, 1), imageRef);
if(rgba[3] > 0) {
CGFloat alpha = ((CGFloat)rgba[3])/255.0;
CGFloat multiplier = alpha/255.0;
return [UIColor colorWithRed:((CGFloat)rgba[0])*multiplier
green:((CGFloat)rgba[1])*multiplier
blue:((CGFloat)rgba[2])*multiplier
alpha:alpha];
}
else {
return [UIColor colorWithRed:((CGFloat)rgba[0])/255.0
green:((CGFloat)rgba[1])/255.0
blue:((CGFloat)rgba[2])/255.0
alpha:((CGFloat)rgba[3])/255.0];
}
CGContextRelease(context);
CGImageRelease(imageRef);
CGColorSpaceRelease(colorSpace);
}