Почему этот NSMutableAttributedString addAttribute работает, только если я использую mutableCopy
У меня есть следующий код:
NSMutableAttributedString *attrS = [[NSMutableAttributedString alloc] initWithString:@"• Get Tested Son"];
NSMutableAttributedString *boldS = [[NSMutableAttributedString alloc] initWithString:@"Son"];
[boldS addAttribute:NSFontAttributeName value:SOMEBOLDFONT range:NSMakeRange(0, boldS.length)];
[attrS replaceCharactersInRange:[attrS.string rangeOfString:boldS.string]
withAttributedString:boldS];
Как видите, я хочу выделить Son
часть. Это не работает, если я делаю вышеупомянутые заявления, но работает, только если я делаю:
[[attrS mutableCopy] replaceCharactersInRange:[attrS.string rangeOfString:boldS.string]
withAttributedString:boldS];
Что может быть причиной этого?
1 ответ
Решение
addAttribute
работает независимо от того, берете ли вы mutableCopy
, Ваш вопрос основан на ложном предположении. Поэтому он не имеет ответа.
Запустите это:
NSMutableAttributedString *attrS = [[NSMutableAttributedString alloc] initWithString:@"• Get Tested Son"];
NSMutableAttributedString *boldS = [[NSMutableAttributedString alloc] initWithString:@"Son"];
UIFont *someBoldFont = [UIFont fontWithName:@"Arial" size:23.0f];
[boldS addAttribute:NSFontAttributeName value:someBoldFont range:NSMakeRange(0, boldS.length)];
NSMutableAttributedString *attrSCopy = [attrS mutableCopy];
[attrS replaceCharactersInRange:[attrS.string rangeOfString:boldS.string]
withAttributedString:boldS];
[attrSCopy replaceCharactersInRange:[attrS.string rangeOfString:boldS.string]
withAttributedString:boldS];
NSLog(@"%@", [attrS isEqual:attrSCopy] ? @"equal" : @"different");
Будет выводить equal
, Закомментируйте replaceCharactersInRange:
для любого attrS
или же attrSCopy
и это выведет different
,