Risposte:
Nella classe del controller, crea un metodo di azione a cui agganci il pulsante in Interface Builder. All'interno di quel metodo puoi tagliare la corda in questo modo:
if ([string length] > 0) {
string = [string substringToIndex:[string length] - 1];
} else {
//no characters to delete... attempting to do so will result in a crash
}
Se vuoi un modo elegante di farlo in una sola riga di codice, puoi scriverlo come:
string = [string substringToIndex:string.length-(string.length>0)];
* Spiegazione dello snippet di codice a una riga di fantasia:
se è presente un carattere da eliminare (ovvero la lunghezza della stringa è maggiore di 0)
(string.length>0)
restituisce 1
quindi il codice restituito:
string = [string substringToIndex:string.length-1];
Se NON è presente un carattere da eliminare (ovvero la lunghezza del stringa NON è maggiore di 0)
(string.length>0)
restituisce 0
quindi il codice restituito:
string = [string substringToIndex:string.length-0];
che impedisce arresti anomali.
string != nil && [string length] > 0
. È probabile che la variabile di stringa di Donal sia stata rilasciata.
Se è un NSMutableString (che consiglierei poiché lo stai cambiando in modo dinamico), puoi usare:
[myString deleteCharactersInRange:NSMakeRange([myRequestString length]-1, 1)];
Le soluzioni qui fornite in realtà non tengono conto dei caratteri Unicode multi-byte ("caratteri composti") e potrebbero comportare stringhe Unicode non valide.
In effetti, il file di intestazione iOS che contiene la dichiarazione di substringToIndex
contiene il seguente commento:
Suggerimento: utilizzare con rangeOfComposedCharacterSequencesForRange: per evitare la suddivisione dei caratteri composti
Scopri come utilizzarerangeOfComposedCharacterSequenceAtIndex:
per eliminare correttamente l'ultimo carattere.
La documentazione è tua amica, NSString
supporta una chiamata substringWithRange
che può accorciare la stringa che hai restituito la stringa accorciata. Non è possibile modificarne un'istanza NSString
immutabile. Se hai un NSMutableString
is ha un metodo chiamato deleteCharactersInRange
che può modificare la stringa in atto
...
NSRange r;
r.location = 0;
r.size = [mutable length]-1;
NSString* shorted = [stringValue substringWithRange:r];
...
substringWithRange:
restituisce a NSString*
. Prendi nota del puntatore.