Я знаю, как решить проблему, которую я собираюсь изложить, однако я немного озадачен тем, почему сценарий кода работает в симуляторе iOS, но не на моем iPad.
У меня есть метод, который проверяет различные свойства, а затем устанавливает цвет фона 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.
Код выше работает без проблем в симуляторе. Однако, когда я запускаю приложение на iPad, оно падает на backgroundColor
.
Я могу исправить это, избавившись от переменной CGColor
и назначив цвет фона непосредственно в операторе switch/case, что я и планирую сделать.
Однако мне любопытно. Почему это может работать в одной среде и не работать в другой?
UPDATE
Пара моментов. Во-первых, стоит упомянуть, что это проект ARC, использующий Xcode 4.2, предназначенный для устройств iOS 5. Кроме того, мой код назначения цветов не совсем то, чем он выглядит, потому что у меня есть ряд определений, которые я использую для установки этих цветов, потому что на них есть ссылки во всем моем приложении.
Вот как выглядят некоторые из #define
утверждений:
#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
Я попытался упростить свой код, потому что компилятор должен заменить ссылки на мои ссылки на мои defines. Тем не менее, на всякий случай об этом стоит упомянуть.