NSString фиксированной длины

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

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

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

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

}

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


person Ileana D'Cruz    schedule 03.03.2013    source источник
comment
Звучит для меня как хорошее использование отдельного сеттера для этого свойства. В сеттере вы можете обрезать строку.   -  person    schedule 03.03.2013
comment
Согласованный. Кажется очень странным иметь специальный тип строки, который имеет максимальную длину, вместо того, чтобы говорить, что свойство foo данного объекта (которое оказывается строкой) имеет максимальную длину. Илеана, можете ли вы объяснить вариант использования этого? Поскольку NSString неизменяемы, вы не можете вызвать вышеуказанный метод (или что-то подобное).   -  person Rob Napier    schedule 03.03.2013
comment
Объекты NSString не изменяемы. Вы не можете урезать их. Вы можете использовать substringFromIndex: или substringToIndex: для аналогичного эффекта.   -  person zneak    schedule 03.03.2013


Ответы (2)


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

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

person Chuck    schedule 03.03.2013

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

-(void)setName:(NSString*)newName
{
  if([newName length]> maxLength)
{
   newName = [newName substringWithRange:NSMakeRange([newName length] - maxLength, maxLength];
}
   _name = newName;
}
person alex    schedule 03.03.2013
comment
Знаете ли вы о том, что NSString является кластером классов, и о последствиях для создания подклассов? - person vikingosegundo; 03.03.2013
comment
вы говорите о подклассе NSString, но код этого не показывает - person vikingosegundo; 03.03.2013
comment
Да.моя вина. приведенный выше код показывает, как реализовать установщик для имени свойства типа NSString в моем пользовательском классе. - person alex; 03.03.2013
comment
Вы знаете, как создать подкласс кластера классов? - person vikingosegundo; 03.03.2013
comment
да, кластер классов подклассов полностью отличается от подклассов обычных классов, и здесь NSString не должен быть подклассом. - person alex; 03.03.2013
comment
так почему вы говорите OP подклассу NSString? - person vikingosegundo; 03.03.2013