Odpowiedzi:
W swojej klasie kontrolera utwórz metodę akcji, do której podłączysz przycisk w Interface Builder. Wewnątrz tej metody możesz przyciąć swój ciąg w następujący sposób:
if ([string length] > 0) {
string = [string substringToIndex:[string length] - 1];
} else {
//no characters to delete... attempting to do so will result in a crash
}
Jeśli chcesz zrobić to w fantazyjny sposób w jednej linii kodu, możesz napisać to jako:
string = [string substringToIndex:string.length-(string.length>0)];
* Wyjaśnienie fantazyjnego jednowierszowego fragmentu kodu:
Jeśli istnieje znak do usunięcia (tj. Długość ciągu jest większa niż 0)
(string.length>0)
zwraca, w 1
ten sposób kod powraca:
string = [string substringToIndex:string.length-1];
Jeśli NIE ma znaku do usunięcia (tj. Długość ciąg NIE jest większy niż 0)
(string.length>0)
zwraca, 0
więc kod zwraca:
string = [string substringToIndex:string.length-0];
co zapobiega awariom.
string != nil && [string length] > 0
. Prawdopodobnie zmienna łańcuchowa Donala została zwolniona.
Jeśli jest to NSMutableString (co polecam, ponieważ zmieniasz go dynamicznie), możesz użyć:
[myString deleteCharactersInRange:NSMakeRange([myRequestString length]-1, 1)];
Podane tutaj rozwiązania w rzeczywistości nie uwzględniają wielobajtowych znaków Unicode („znaków złożonych”) i mogą skutkować nieprawidłowymi ciągami znaków Unicode.
W rzeczywistości plik nagłówkowy iOS zawierający deklarację substringToIndex
zawiera następujący komentarz:
Wskazówka: używaj z rangeOfComposedCharacterSequencesForRange: aby uniknąć dzielenia złożonych znaków
Zobacz, jakrangeOfComposedCharacterSequenceAtIndex:
poprawnie usunąć ostatni znak.
Dokumentacja jest twoim przyjacielem, NSString
obsługuje wywołanie, substringWithRange
które może skrócić ciąg, który masz, zwrócić skrócony String. Nie można zmodyfikować jej wystąpienia NSString
, jest niezmienne. Jeśli masz, NSMutableString
to ma wywoływaną metodę, deleteCharactersInRange
która może modyfikować ciąg w miejscu
...
NSRange r;
r.location = 0;
r.size = [mutable length]-1;
NSString* shorted = [stringValue substringWithRange:r];
...
substringWithRange:
zwraca plik NSString*
. Zwróć uwagę na wskaźnik.