Я знаю, как решить проблему, которую я собираюсь обрисовать, однако я немного озадачен тем, почему сценарий кода работает в симуляторе 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, и это то, что я планирую сделать.
Однако мне любопытно.Почему это работает в одной среде, а не в другой?
ОБНОВЛЕНИЕ
Пара вещей.Во-первых, стоит упомянуть, что это проект 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
Я попытался упростить свой код, потому что компилятор должен заменить ссылки на мои ссылки на мои определения.Тем не менее, стоит упомянуть на всякий случай.