2014-01-27 1 views
0

Я пытаюсь создать категорию, чтобы изменить цвет существующей NSAttributedString, которая отображается в CATextLayer. Вот реализация категорииИзменение цвета существующей NSAttributedString

@implementation NSAttributedString (_additions) 

-(NSAttributedString*)attributedStringWithColor:(UIColor*)color{ 

    NSMutableAttributedString* mutableSelf = [self mutableCopy]; 

    [mutableSelf addAttribute:NSForegroundColorAttributeName value:color range:NSMakeRange(0, mutableSelf.length)]; 

    return [mutableSelf attributedSubstringFromRange:NSMakeRange(0, mutableSelf.length)]; 

} 
@end 

CATextLayer находится в подклассе CAShapeLayer. Я должен также упомянуть, что CATextLayer делает рендеринг с правильными атрибутами, EXCEPT цвет.

// in .m 

// class continuation: 
    @interface ONCShapeLayerSubclass() 
    { 
     CATextLayer* textLayer;  
    } 
    @end 

@implementation 
//... 

-(void)update{ 

    // method that initializes the catextlayer 
    //... 

    if(!textLayer){ 
     textLayer = [CATextLayer layer]; 
     textLayer.alignmentMode = kCAAlignmentCenter; 
     textLayer.frame = self.bounds; 
     textLayer.foregroundColor = [kDefaultLineColor CGColor]; 
     [self addSublayer:textLayer]; 
    } 

    textLayer.string = //// a method that returns an attributed string from a database 

    //... 

    [self updateColor]; 
} 


-(void)updateColor{ 

    if(textLayer)textLayer.string = [textLayer.string attributedStringWithColor:kDefaultLineColor]; 
} 

@end 

Строка отображается приписываемым ЗА ИСКЛЮЧЕНИЕМ для цвета. И затем я получаю целую кучу ошибок:

CGContextSetFillColorWithColor: недопустимый контекст 0x0. Это серьезная ошибка. Это приложение или используемая им библиотека использует недопустимый контекст и тем самым способствует общему ухудшению стабильности и надежности системы. Это уведомление является любезностью: устраните эту проблему. Это станет фатальной ошибкой в ​​предстоящем обновлении.

Любые идеи, почему это не работает?

+0

Показать код, в котором вы находитесь _calling_ 'attributedStringWithColor:'. _That_, где проблема - не в коде, который вы показали. – matt

+0

Я отредактировал вопрос. Спасибо – olynoise

+0

Вы уверены, что 'textLayer.string' является атрибутной строкой? Это может быть «NSString». Это также может быть «ноль». –

ответ

0

Насколько я могу судить, это ошибка с CATextLayer, а не с моим кодом. Он корректно работает для текста, отображаемого в UILabels, только не в CATextLayers.

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

  • Нет связанных вопросов^_^