2009-07-04 27 views

Respuesta

401

En su clase controlador, crear un método de acción va a enganchar el botón hasta en Interface Builder. Dentro de ese método se puede recortar su cadena como esta:


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 quieres una forma elegante de hacer esto en una sola línea de código usted podría escribirlo como:

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

* Explicación de la fantasía código de una línea de fragmento:

Si hay un personaje eliminar (es decir, la longitud de la cadena es mayor que 0)
(string.length>0) vuelve 1 haciendo así el código de retorno:
string = [string substringToIndex:string.length-1];

si no hay un personaje eliminar (es decir, la longitud de la cadena no es mayor que 0)
(string.length>0) devuelve 0 haciendo que el código devuelva:
string = [string substringToIndex:string.length-0];
Lo que evita bloqueos.

+8

Su solución tiene un error por 1 error. Debe ser [string substringToIndex: [string length] - 1]; –

+0

Hace "cadena" se refiere a "string.text" o simplemente el nombre de la cadena – Omar

+0

Gracias Jim, era demasiado temprano en la mañana para la aritmética, supongo. :) Omar, cadena se refiere a una variable llamada cadena que contiene el texto que desea modificar. Puede consultar la documentación sobre las diferentes formas en que puede crear un objeto NSString, ya sea desde un archivo en disco o desde datos en su aplicación. –

5

La documentación es su amigo, NSString admite una llamada substringWithRange que puede acortar la cadena que tiene un retorno de la cadena acortada. No puede modificar una instancia de NSString es inmutable. Si usted tiene una NSMutableString disponga de un método llamado deleteCharactersInRange que puede modificar la secuencia en el lugar

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

NSMakeRange a veces puede hacer que el relleno de una estructura struct parezca un poco más elegante. – dreamlax

+0

@Harald, 'substringWithRange:' devuelve un 'NSString *'. Toma nota del puntero. –

51

Si se trata de un NSMutableString (que recomiendo ya que está cambiando de forma dinámica), puede utilizar:

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

Las soluciones que se dan aquí en realidad no tienen en caracteres Unicode cuenta de varios bytes (" caracteres compuestos "), y podría dar como resultado cadenas Unicode no válidas.

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

Consejo: Usar con rangeOfComposedCharacterSequencesForRange: para evitar la ruptura de caracteres compuestos

Ver how to use rangeOfComposedCharacterSequenceAtIndex: eliminar el último personaje correctamente

Cuestiones relacionadas