【发布时间】:2010-11-08 02:31:56
【问题描述】:
在 iOS 的 Objective-C 中,如何使用按钮操作删除字符串的最后一个字符?
【问题讨论】:
标签: ios objective-c string cocoa cocoa-touch
在 iOS 的 Objective-C 中,如何使用按钮操作删除字符串的最后一个字符?
【问题讨论】:
标签: ios objective-c string cocoa cocoa-touch
在您的控制器类中,创建一个操作方法,您将在 Interface Builder 中将按钮连接到该方法。在该方法中,您可以像这样修剪字符串:
if ([string length] > 0) {
string = [string substringToIndex:[string length] - 1];
} else {
//no characters to delete... attempting to do so will result in a crash
}
如果你想要一种花哨的方式,只需一行代码,你可以这样写:
string = [string substringToIndex:string.length-(string.length>0)];
*花哨的一行代码sn-p的解释:
如果有字符要删除(即字符串长度大于0)
(string.length>0) 返回 1 从而使代码返回:
string = [string substringToIndex:string.length-1];
如果没有要删除的字符(即字符串的长度不大于 0)
(string.length>0) 返回 0 从而使代码返回:
string = [string substringToIndex:string.length-0];
这可以防止崩溃。
【讨论】:
string != nil && [string length] > 0。 Donal 的字符串变量可能被过度释放。
如果它是一个 NSMutableString(我会推荐它,因为您正在动态更改它),您可以使用:
[myString deleteCharactersInRange:NSMakeRange([myRequestString length]-1, 1)];
【讨论】:
这里给出的解决方案实际上没有考虑多字节 Unicode 字符(“组合字符”),并且可能导致无效的 Unicode 字符串。
实际上,包含substringToIndex声明的iOS头文件包含以下注释:
提示:与 rangeOfComposedCharacterSequencesForRange 一起使用:以避免分解组合字符
请参阅how to use rangeOfComposedCharacterSequenceAtIndex: 以正确删除最后一个字符。
【讨论】:
文档是你的朋友,NSString 支持调用substringWithRange,它可以缩短你拥有的字符串并返回缩短的字符串。您不能修改 NSString 的实例,它是不可变的。如果你有一个NSMutableString,那么有一个名为deleteCharactersInRange 的方法可以就地修改字符串
...
NSRange r;
r.location = 0;
r.size = [mutable length]-1;
NSString* shorted = [stringValue substringWithRange:r];
...
【讨论】:
substringWithRange: 返回NSString*。记下指针。