NSString * Сбрасывает квалификаторы

Почему я получаю 'NSString *' сбрасывает квалификаторы на currentTextB в третьей строке "CFAttributedStringSetAtribute(currentTextB..."

CFAttributedStringRef currentTextB = CFAttributedStringCreate(NULL, stringRef, NULL);

CTFontRef font = CTFontCreateWithName((CFStringRef)@"Helvetica", 10.0f, nil);
CFAttributedStringSetAttribute(currentTextB,CFRangeMake(0, strLength-1),kCTFontAttributeName,font);

1 ответ

Решение

Первый аргумент CFAttributedStringSetAttribute() должна быть изменяемой приписанной строкой. Пример:

CFStringRef stringRef = CFSTR("foo");

// Create mutable attributed string from CFStringRef:
CFMutableAttributedStringRef currentTextB = CFAttributedStringCreateMutable(NULL, 0);
CFAttributedStringReplaceString(currentTextB, CFRangeMake(0, 0), stringRef);

// Set an attribute:
CTFontRef font = CTFontCreateWithName(CFSTR("Helvetica"), 10.0f, NULL);
CFAttributedStringSetAttribute(currentTextB,
                               CFRangeMake(0, CFAttributedStringGetLength(currentTextB)),
                               kCTFontAttributeName,font);

В качестве альтернативы, работа с типом Foundation NSMutableAttributedString который является "бесплатным мостом" для CFMutableAttributedStringRef и поэтому могут использоваться взаимозаменяемо:

NSString *string = @"foo";
NSMutableAttributedString *currentTextB = [[NSMutableAttributedString alloc] initWithString:string attributes:nil];
NSFont *font = [NSFont fontWithName:@"Helvetica" size:10.0];
[currentTextB addAttribute:NSFontAttributeName value:font range:NSMakeRange(0, [string length])];
Другие вопросы по тегам