私は、私が概説しようとしている問題を解決する方法を知っていますが、なぜコードシナリオがiOSシミュレータで動作しますが、私のiPadでは動作しないのか、ちょっと困惑しています。既存のCGColorをCGColorプロパティに割り当てると、iOSデバイスではなくiOSシミュレータで機能します。どうして?
私はさまざまなプロパティをチェックし、プロパティの状態に応じてCALayer
の背景色を設定するメソッドを持っています。次のコードは私の色割り当て方法と似ています:
//This will be the CALayer BGColor...
CGColor c = UIColor.blueColor.CGColor; //Blue is the default
switch (myState)
{
case state_one:
c = UIColor.greenColor.CGColor;
//... more code ...
break;
case state_two:
c = UIColor.redColor.CGColor;
//... more code ...
break;
case state_three: //multiple cases are like the state_three case.
//Other code, but I don't need to assign the color. Blue works...
}
myCALayer.backgroundColor = c; //Oh-noes!!! Here we get the dreaded EXC_BAD_ACCESS on iPad
//...more code dealing with the layer.
上記のコードはSimulatorで問題なく動作します。ただし、iPadでアプリケーションを実行すると、backgroundColor
割り当て時にクラッシュします。
これは、CGColor
変数を取り除き、私のswitch/caseステートメントの中から直接バックグラウンドカラーを割り当てることで解決できます。これが私がやっていることです。
しかし、私は好奇心が強いです。なぜこれはある環境で動作し、他の環境では動作しないのでしょうか?
UPDATE
カップルの事。まず、iOS 5デバイスをターゲットにした、Xcode 4.2を使用したARCプロジェクトです。また、私のカラー割り当てコードは、アプリケーション全体を通してすべて参照されているため、これらの色を設定するために使用する一連の定義があるため、まったく同じではありません。コンパイラが私の定義に私のレフリーへのREFを交換する必要がありますので、私は自分のコードを簡素化しようとした
#define BLUE [UIColor colorWithRed:8.0/255.0 green:80.0/255.0 blue:150.0/255.0 alpha:1.0].CGColor
#define GREEN (UIColor.blueColor.CGColor)
//...and there are about 6 other colors
:
これは#define
文の数がどのように見えるかです。それでも、それだけで言及する価値があります。
あなたは、各ビルドにQuartzCoreフレームワークが含まれていることを確認してくださいましたか? –
私はあなたの 'CGColor'で構築することさえできません。おそらく' CGColorRef'を意味します。 –
私はフレームワークを追加し、この割り当てを行っているコードファイル内のヘッダを参照しました。 – RLH