2013-07-02 2 views
0

у меня возникли некоторые проблемы с моей категории для расщеплении NSMutableAttributedString пополам он падает на NSMakeRange(...)разделить NSMutableAttributedString пополам категории

#import <Foundation/Foundation.h> 

@interface NSMutableAttributedString (StringSplit) 
- (NSMutableAttributedString *)lastHalfLinesOfAttributedString; 
@end 


#import "NSAttributedString+StringSplit.h" 

@implementation NSMutableAttributedString (StringSplit) 

- (NSMutableAttributedString *)lastHalfLinesOfAttributedString 
{ 
    NSLog(@"lastHalfLinesOfAttributedString with length:%d from index: %d", [self length], [self length]/2); 

    NSMutableAttributedString *result = [[NSMutableAttributedString alloc] init]; 
    [result insertAttributedString:[self attributedSubstringFromRange:NSMakeRange([self length]/2, [self length]-1)] atIndex:0]; 

    return result; 
} 
@end 

lastHalfLinesOfAttributedString с длиной: 1020 из индекса: 510 2013-07- 02 17: 43: 16,209 hackers_ssh [36675: c07] * Нагрузочный приложение из-за для неперехваченного исключения 'NSRangeException', причина: 'NSConcreteMutableAttributedString attributedSubstringFromRange :: Нет из оценки' * Первого

ответ

1

Второй аргумент NSMakeRange представляет собой length (отсчитывается от индекса старта в первом аргументе).

Значит, вы хотите NSMakeRange([self length]/2, ([self length] + 1)/2).

Кстати, этот метод разбиения строк работает корректно только в том случае, если в строке нет комбинированных последовательностей символов или суррогатных пар.

+0

Существует опасность только в том случае, если существует такой символ/пара, охватывающий индекс '[self length]/2'. Такие символы/пары где-нибудь еще только рискуют, что две половины не будут иметь одинаковую длину. – rmaddy

+0

@rmaddy Да, конечно, нет никакого вреда, если не разбивать пару. Спасибо, rmaddy, за это ясно. –

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