2013-04-20 3 views
0

Мое приложение разбивается, когда я пытаюсь изменить цвет текста, который находится внутри кнопки myButton.titleLabel.textColor.Установите tltleColor кнопки

Если я что приложение не ломается, а цвет текста держит в blackColor:

[myButton setTitleColor:[UIColor colorWithRed:0.41 green:0.107 blue:0.252 alpha:1.0] forState:UIControlStateNormal]; 

Если я могу это сделать другим способом в приложение аварии:

.m:

-(IBAction)buttonTapped:(id)sender { 

    [myButton setTitleColor:myColor forState:UIControlStateNormal]; 

} 

[...] 

-(void) viewDidLoad { 

    myColor = [UIColor colorWithRed:0.41 green:0.107 blue:0.252 alpha:1.0]; 

} 

.h:

UIColor *myColor; 
Выход

отладчик:

2013-04-20 18:23:45.625 myApp[6291:c07] -[NSShadow set]: unrecognized selector sent to instance 0x753bfd0 
2013-04-20 18:23:45.627 myApp[6291:c07] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[NSShadow set]: unrecognized selector sent to instance 0x753bfd0' 
*** First throw call stack: 
(0x15bb012 0x12c8e7e 0x16464bd 0x15aabbc 0x15aa94e 0x369c87 0x369f76 0x368cd9 0x36b098 0x25ce6e 0x126a3f 0x12652c 0x1269ba 0x1262b6 0x126994 0x11b0e2 0x11b15c 0x990bc 0x9a227 0x9a8e2 0x1583afe 0x1583a3d 0x15617c2 0x1560f44 0x1560e1b 0x261c7e3 0x261c668 0x20cffc 0x21c2 0x20f5) 
libc++abi.dylib: terminate called throwing an exception 
(lldb) 

Как я могу решить это? Я хочу использовать второй способ (если это возможно).

+1

Вопрос не в размещенном коде. В вашем коде должна быть проблема. Было бы также полезно, если бы вы могли добавить журнал сбоев. – miho

+1

@miho Да, это так. Без использования ARC цвет уже освобожден (из-за автоопределения) до вызова 'buttonTapped:'. – omz

ответ

2

цвет объекта, который вы создаете с colorWithRed:green:blue:alpha: является autoreleased, поэтому к тому времени, buttonTapped: называется объект уже освобождаться, поэтому у вас есть указатель, который указывает на данные мусора (зависшего указатель).

Вы можете переключиться на использование ARC (автоматический подсчет ссылок) и/или создать сохраненное свойство для myColor. Это будет выглядеть в вашем заголовке:

@property (nonatomic, retain) UIColor *myColor; 

Затем, вместо установки переменной экземпляра напрямую, используйте:

self.myColor = [UIColor colorWithRed:0.41 green:0.107 blue:0.252 alpha:1.0]; 

в viewDidLoad. Если вы не используете ARC, не забудьте отпустить цвет в dealloc:

- (void)dealloc 
{ 
    [_myColor release]; 
    [super dealloc]; 
} 
+0

спасибо! Это была проблема! – yeker3

Смежные вопросы