Я пытаюсь создать категорию, чтобы изменить цвет существующей 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. Это серьезная ошибка. Это приложение или используемая им библиотека использует недопустимый контекст и тем самым способствует общему ухудшению стабильности и надежности системы. Это уведомление является любезностью: устраните эту проблему. Это станет фатальной ошибкой в предстоящем обновлении.
Любые идеи, почему это не работает?
Показать код, в котором вы находитесь _calling_ 'attributedStringWithColor:'. _That_, где проблема - не в коде, который вы показали. – matt
Я отредактировал вопрос. Спасибо – olynoise
Вы уверены, что 'textLayer.string' является атрибутной строкой? Это может быть «NSString». Это также может быть «ноль». –