2012-04-26 13 views
2

プレーンUIViewのサブクラスの「EXC_BAD_ACCESS」でクラッシュ:CAGradientLayerはONLY次のコードを使用して、可能な限り簡単なユースケース

- (id)initWithCoder:(NSCoder *)aDecoder 
{ 
    self = [super initWithCoder:aDecoder]; 
    if (self) { 
     // Initialization code 

     CAGradientLayer* gradientLayer = [CAGradientLayer layer]; 
     gradientLayer.colors = [NSArray arrayWithObjects:[UIColor whiteColor], [UIColor blackColor], nil]; 
     gradientLayer.locations = [NSArray arrayWithObjects:[NSNumber numberWithFloat:0.0], [NSNumber numberWithFloat:1.0], nil]; 

     [self.layer addSublayer:gradientLayer]; 

    return self; 
} 

キルEXC_BAD_ACCESSとランタイム(あなたが尋ねる前にしてはいない、何のゾンビありません)。

また、CAGradientLayerがオーバーリリースされているわけではありません。レイヤー上に複数の浮動保持を配置しても効果はありません。

(ちなみに、CAGradientLayerは私が行っていたプロジェクトで実際に動作することはありませんでした。私はアニメーション勾配を必要とする以外、私は、それを使用することはありません、とAppleのCGGradientクラスでは唯一のアニメーションコードすさまじくバグが発生しやすい)

+1

可能重複[CAGradientLayer使用しているとき、なぜアプリがクラッシュするん](http://stackoverflow.com/questions/9933862/why-does-the-app-crash-when-using-cagradientlayer) – Adam

+0

それを重複していますが、私の答えはARCのために更新されています。 FWIW。 –

+1

問題を発見しました:私は愚かに他人のコードをウェブからコピーしました:)。仕様を読んで、あなたはUIColorを渡すことは許されません(私は、AppleがUIColorを受け入れていた、またはそれをTFBしている、と思っていました。 – Adam

答えて

5

問題はここにあるかもしれない可能おり、constの配列をサポートしています。

gradientLayer.colors = [NSArray arrayWithObjects:[UIColor whiteColor], [UIColor blackColor], nil]; 

ものを色がCore Graphicの同等物である必要があります。

gradientLayer.colors = [NSArray arrayWithObjects:(__bridge id)[UIColor whiteColor].CGColor, (__bridge id)[UIColor blackColor].CGColor, nil];