2013-07-01 2 views
4

Есть ли простой способ разделить NSAttributedString, поэтому я получаю только последние 50 или около того строк?Извлечь последние 50 строк из NSAttributedString

NSMutableAttributedString *resultString = [receiveView.attributedText mutableCopy]; 
     [resultString appendAttributedString:[ansiEscapeHelper attributedStringWithANSIEscapedString:message]]; 
     if ([[resultString.string componentsSeparatedByCharactersInSet:[NSCharacterSet newlineCharacterSet]] count]>50) { 
      //resultString = [resultString getLastFiftyLines]; 
     } 
+1

Вы спрашиваете о линиях или символах? ([resultString length]> 50) - о символах, а не в строках – Tala

+0

Я думаю, оба работают, но я бы предпочел строки. –

+0

Строки в строке определяются в соответствии с размером шрифта + ui ширина элемента + перенос слов. Если работает 50 символов, не делайте это слишком сложным и используйте подстроку, как в моем ответе. – Tala

ответ

3

есть простой способ разделить NSAttributedString, поэтому я получаю только последние 50 или около того строк?

Нет, вы должны будете просить string и определить диапазон вас интересует, а затем создать новый NSAttributedString представление, полученный из источника, используя API, такие как - [NSAttributedString attributedSubstringFromRange:]:

- (NSAttributedString *)lastFiftyLinesOfAttributedString:(NSAttributedString *)pInput 
{ 
    NSString * string = pInput.string; 
    NSRange rangeOfInterest = ...determine the last 50 lines in "string"...; 
return [pInput attributedSubstringFromRange:rangeOfInterest]; 
} 
+0

Это не звучит очень трудно ... Я думаю, я мог бы определить последние 50 строк из: [[resultString.string componentsSeparatedByCharactersInSet: [NSCharacterSet newlineCharacterSet]] число] Но как мне сделать NSRange из что ... –

+0

@DavidKarlsson, используя этот API, вы можете добавить '-length' из последних 50 строк, возвращаемых из' -componentsSeparatedByCharactersInSet: ', и добавить 1 для каждой новой строки (опущено' -componentsSeparatedByCharactersInSet: '). сумма представляет собой * длину * интересующей строки (например, последние 234 символа), поэтому 'NSRange' будет' {string.length-sum/* location * /, sum/* length * /} '. – justin

2

Вы можете использовать метод подстроку AttributedString:

if ([resultString length]>50) { 
    resultString = [resultString attributedSubstringFromRange:NSMakeRange(0, 50)]; 
} 

NSMakeRange - 0 говорит нам, с чего начать и 50 является длина подстроки

+0

Это последние 50 * символов. * Я считаю, что OP ищет последние 50 * строк. * –

+0

Давайте проверим двойную проверку. Так как он использует [resultString length]> 50 в своем вопросе – Tala

+0

это не 50 первых символов? от 0 до 50? –

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