framework español iphone objective-c cocoa cocoa-touch

iphone - framework - cocoa touch español



Objetivo C: eliminar el último carácter de la cadena (4)

En Objective C para el iPhone, ¿cómo eliminaría el último carácter de una cadena utilizando una acción de botón.


En su clase de controlador, cree un método de acción en el que enganche el botón en Interface Builder. Dentro de ese método puedes recortar tu cadena así:


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 sigue:

string = [string substringToIndex:string.length-(string.length>0)];

* Explicación del elegante fragmento de código de una línea:

Si hay un personaje para eliminar (es decir, la longitud de la cadena es mayor que 0)
(string.length>0) devuelve 1 lo que hace que el código retorne:
string = [string substringToIndex:string.length-1];

Si NO hay un personaje para eliminar (es decir, la longitud de la cadena NO es mayor que 0)
(string.length>0) devuelve 0 lo que hace que el código retorne:
string = [string substringToIndex:string.length-0];
Lo que evita los bloqueos.


La documentación es tu amiga, NSString admite una substringWithRange NSString que puede acortar la cadena que tienes para devolver la cadena acortada. No puede modificar una instancia de NSString , es inmutable. Si tiene un NSMutableString tiene un método llamado deleteCharactersInRange que puede modificar el string en su lugar

... NSRange r; r.location = 0; r.size = [mutable length]-1; NSString* shorted = [stringValue substringWithRange:r]; ...


Las soluciones proporcionadas aquí en realidad no tienen en cuenta los caracteres Unicode de múltiples bytes ("caracteres compuestos"), y podrían dar como resultado cadenas Unicode no válidas.

De hecho, el archivo de encabezado de iOS que contiene la declaración de substringToIndex contiene el siguiente comentario:

Sugerencia: Usar con rangeOfComposedCharacterSequencesForRange: para evitar dividir caracteres compuestos

Vea cómo usar rangeOfComposedCharacterSequenceAtIndex: para eliminar el último carácter correctamente.


Si es un NSMutableString (que recomendaría ya que lo está cambiando dinámicamente), puede usar:

[myString deleteCharactersInRange:NSMakeRange([myRequestString length]-1, 1)];