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ę substringToIndexzawiera 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, NSStringobsługuje wywołanie, substringWithRangektó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, NSMutableStringto ma wywoływaną metodę, deleteCharactersInRangektó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.