2009-07-04 23 views

risposta

401

Nella classe controllore, creare un metodo di azione si collegare il pulsante fino a in Interface Builder. Dentro questo metodo si può tagliare la stringa 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 si desidera un modo elegante per fare questo in una sola riga di codice potresti scrivere come:

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

* Spiegazione di fantasia codice di un linea di frammento:

Se c'è un personaggio da cancellare (vale a dire la lunghezza della stringa è maggiore di 0)
(string.length>0) rendimenti 1 rendendo così il codice di ritorno:
string = [string substringToIndex:string.length-1];

se non c'è un carattere da cancellare (cioè la lunghezza della stringa non è superiore a 0)
restituisce 0 restituendo il codice:
string = [string substringToIndex:string.length-0];
Che impedisce arresti anomali.

+8

La tua soluzione ha un difetto di 1 bug. Dovrebbe essere [string substringToIndex: [string length] - 1]; –

+0

Fa "stringa" si riferisce a "string.text" o solo il nome della stringa – Omar

+0

Grazie Jim, era troppo presto per l'aritmetica, credo. :) Omar, stringa si riferisce a una variabile chiamata stringa che contiene il testo che si desidera modificare. Puoi dare un'occhiata alla documentazione per i diversi modi in cui puoi creare un oggetto NSString, da un file su disco o da dati nella tua applicazione. –

5

La documentazione è un tuo amico, NSString supporta una chiamata substringWithRange che può accorciare la stringa che hai restituito la stringa abbreviata. Non è possibile modificare un'istanza di NSString è immutabile. Se si dispone di un NSMutableString è ha un metodo chiamato deleteCharactersInRange che può modificare la stringa in posizione

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

NSMakeRange a volte può rendere un po 'più elegante il riempimento di una struttura struct. – dreamlax

+0

@Harald, 'substringWithRange:' restituisce un 'NSString *'. Prendi nota del puntatore. –

51

Se si tratta di un NSMutableString (che vi consiglio vivamente in quanto si sta modificando in modo dinamico), è possibile utilizzare:

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

Le soluzioni qui riportati in realtà non tengono conto multi-byte caratteri Unicode (" caratteri composti "), e potrebbe causare stringhe Unicode non valide.

In realtà, il file di intestazione iOS che contiene la dichiarazione di substringToIndex contiene il seguente commento:

Suggerimento: usate con rangeOfComposedCharacterSequencesForRange: per evitare di rompere i personaggi composte

Vedi how to use rangeOfComposedCharacterSequenceAtIndex: da eliminare l'ultimo carattere correttamente.

Problemi correlati