2013-03-03 3 views
0

Я хочу объект nsstring, который может хранить только заданную длину символа в нем.NSString с фиксированной длиной

Если он превышает его, он должен быть усечен слева. Например, если я устанавливаю длину до 5, и я ввожу значение как Ileana, тогда он должен хранить leana.

Я попытался, сделав категорию на NSString, но я из идей:

-(void)setMaximumLength:(NSInteger)length;{ 
    if ([self length]>length) { 
     NSLog(@"exxed"); 
    } 

} 

Пожалуйста, предложите что я должен делать? Я считаю, что мне нужно посмотреть размер строки, но как сделать в категории, и какое уведомление будет вызываться?

+1

Звучит для меня как хорошее использование индивидуального сеттера для этого свойства. В установщике вы можете обрезать строку. – 2013-03-03 18:14:31

+0

Согласовано. Кажется очень странным иметь специальный тип строки, который имеет максимальную длину, вместо того, чтобы говорить, что свойство «foo» данного объекта (которое является строкой) имеет максимальную длину. Илеана, можете ли вы объяснить пример использования? Поскольку NSStrings являются неизменяемыми, нет смысла вызывать вышеупомянутый метод (или что-то в этом роде). –

+0

Объекты NSString не изменяются. Вы не можете усечь их. Вы можете использовать 'substringFromIndex:' или 'substringToIndex:' для аналогичного эффекта. – zneak

ответ

4

Это звучит подозрительно, как форматирование для отображения или пользовательской обработки ввода или что-то в этом роде, а не фактический ограничение, которое вы хотите наложить на строки в целом. В этом случае класс NSFormatter или бит кода в определенном наборе свойств контроллера будут хорошей идеей.

Но если вы действительно хотите, чтобы это было на самой строки, вам необходимо либо предоставить метод, как stringByTruncatingToLength: на NSString или вам нужно переключиться на использование NSMutableString везде, потому что NSStrings не могут быть изменены на всех, и, таким образом, setMaximumLength: метод было бы бессмысленным.

2

Механизм усечения может быть реализован следующим образом: (для свойства NSString из пользовательского класса)

-(void)setName:(NSString*)newName 
{ 
    if([newName length]> maxLength) 
{ 
    newName = [newName substringWithRange:NSMakeRange([newName length] - maxLength, maxLength]; 
} 
    _name = newName; 
} 
+0

Знаете ли вы, что NSString является кластером классов и последствиями для подкласса, которые приносят? – vikingosegundo

+0

Вы говорите о подклассе NSString, но код не показывает его – vikingosegundo

+0

Ошибка Yes.my. приведенный выше код показывает, как реализовать сеттер для свойства «Имя» типа NSString в моем пользовательском классе – alex

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