En Objective-C para iOS, ¿cómo eliminaría el último carácter de una cadena usando una acción de botón?
En Objective-C para iOS, ¿cómo eliminaría el último carácter de una cadena usando una acción de botón?
En su clase de controlador, cree un método de acción al que conectará el botón en Interface Builder. Dentro de ese método puedes recortar tu cadena de esta manera:
if ([string length] > 0) {
string = [string substringToIndex:[string length] - 1];
} else {
//no characters to delete... attempting to do so will result in a crash
}
Si desea una forma elegante de hacerlo en una sola línea de código, puede escribirlo como:
string = [string substringToIndex:string.length-(string.length>0)];
* Explicación del fragmento de código elegante de una línea:
si hay un carácter para eliminar (es decir, la longitud de la cadena es mayor que 0), se
(string.length>0)
devuelve 1
el código:
string = [string substringToIndex:string.length-1];
si NO hay un carácter para eliminar (es decir, la longitud del código
la cadena NO es mayor que 0)
(string.length>0)
devuelve0
lo que hace que el código regrese: lo
string = [string substringToIndex:string.length-0];
que evita bloqueos
string != nil && [string length] > 0
. Lo más probable es que la variable de cadena de Donal esté siendo liberada en exceso.Si es un NSMutableString (que recomendaría ya que lo está cambiando dinámicamente), puede usar:
fuente
Las soluciones dadas aquí en realidad no tienen en cuenta los caracteres Unicode de varios bytes ("caracteres compuestos"), y podrían generar cadenas Unicode no válidas.
De hecho, el archivo de encabezado de iOS que contiene la declaración de
substringToIndex
contiene el siguiente comentario:Vea cómo usar
rangeOfComposedCharacterSequenceAtIndex:
para eliminar el último carácter correctamente.fuente
La documentación es su amigo,
NSString
admite una llamadasubstringWithRange
que puede acortar la cadena que le devuelve la cadena acortada. No puede modificar una instancia deNSString
ella es inmutable. SiNSMutableString
tiene un método tiene un método llamadodeleteCharactersInRange
que puede modificar la cadena en su lugarfuente
substringWithRange:
devuelve aNSString*
. Toma nota del puntero.