So come risolvere il problema che sto per delineare, tuttavia, sono un po 'sconcertato sul perché lo scenario del codice funzioni nel simulatore iOS ma non sul mio iPad.L'assegnazione di un CGColor esistente a una proprietà CGColor funziona in iOS Simulator, non nel dispositivo iOS. Perché?
Ho un metodo che controlla varie proprietà e quindi imposta il colore di sfondo di un CALayer
a seconda dello stato di una proprietà. Il seguente codice è simile al mio metodo di assegnazione dei colori:
//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.
Il codice sopra funziona senza problemi nel simulatore. Tuttavia, quando eseguo l'applicazione sul mio iPad, si blocca al momento dell'assegnazione backgroundColor
.
Posso risolvere questo problema eliminando la variabile CGColor
e assegnando il colore di sfondo direttamente dall'istruzione switch/case, ed è ciò che sto pensando di fare.
Tuttavia, sono curioso. Perché dovrebbe funzionare in un ambiente e non nell'altro?
UPDATE
paio di cose. Innanzitutto, vale la pena ricordare che si tratta di un progetto ARC, che utilizza Xcode 4.2, destinato a dispositivi iOS 5. Inoltre, il mio codice di assegnazione del colore non è interamente quello che sembra perché ho una serie di definizioni che uso per impostare questi colori perché sono referenziati in tutta la mia applicazione.
Questo è ciò che alcune delle affermazioni #define
assomiglia:
#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
ho cercato di semplificare il mio codice perché il compilatore dovrebbe sostituire gli arbitri ai miei arbitri ai miei definisce. Comunque, vale la pena menzionarlo per ogni evenienza.
Avete fatto sicuri di includere il quadro QuartzCore in ogni costruire? –
Il mio non sarà nemmeno costruito con il tuo 'CGColor', forse intendevi' CGColorRef' –
Ho aggiunto il framework e ho fatto riferimento alle intestazioni all'interno del file di codice che sta effettuando questo compito. – RLH