2013-03-03 104 views
0

我想要一个只能存储指定长度的字符的nsstring对象。固定长度的NSString

如果超过,它应该从左边截断。例如,如果我将长度设置为5,并且我输入值作为Ileana,那么它应该存储leana。

我试图通过使上NSString的一个类别,但我的想法:

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

} 

请建议我应该怎么办?我想我需要观察字符串大小,但是如何在某个类别中执行操作,以及将调用哪个通知?

+1

对我来说听起来像是一个很好的使用这个属性的个人二传手。在setter中,你可以截断字符串。 – 2013-03-03 18:14:31

+0

同意。看起来很奇怪有一种特殊类型的字符串具有最大长度,而不是说给定对象的“foo”属性(恰好是字符串)具有最大长度。 Ileana,你能解释一下这个用例吗?由于NSString是不可变的,所以你可以调用上述方法(或类似的东西)没有意义。 – 2013-03-03 19:33:48

+0

NSString对象不可变。你不能截断它们。您可以使用'substringFromIndex:'或'substringToIndex:'来获得类似的效果。 – zneak 2013-03-03 19:45:10

回答

4

该可疑听起来像用于显示或处理的用户输入或类似的东西格式化而不是实际的一般来说,你想强加给字符串。在这种情况下,NSFormatter类或某些特定控制器属性设置器中的一段代码将是一个好主意。

但如果你真的希望这是对字符串本身,您可能需要提供一种方法,就像stringByTruncatingToLength:上的NSString或者你需要切换到任何地方使用的NSMutableString,因为NSString的不能在所有的修改,并因此setMaximumLength:方法会是没有意义的。

2

截断的机构可以实现这样的:(为一个自定义类的的NSString属性)

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

您是否知道NSString是一个类集群,并带来了子类化的后果? – vikingosegundo 2013-03-03 19:22:51

+0

你正在谈论的是NSString的子类,但代码并没有显示它 – vikingosegundo 2013-03-03 19:29:24

+0

是的。我的错。上面的代码展示了如何在我的自定义类中为NSString类型的属性“Name”实现setter。 – alex 2013-03-03 19:31:29