답변:
컨트롤러 클래스에서 Interface Builder에서 버튼을 연결할 액션 메소드를 만듭니다. 이 방법 내에서 다음과 같이 문자열을자를 수 있습니다.
if ([string length] > 0) {
string = [string substringToIndex:[string length] - 1];
} else {
//no characters to delete... attempting to do so will result in a crash
}
한 줄의 코드 로이 작업을 수행하는 멋진 방법을 원한다면 다음과 같이 작성할 수 있습니다.
string = [string substringToIndex:string.length-(string.length>0)];
* 공상적인 한 줄짜리 코드 스 니펫 설명 :
삭제할 문자가있는 경우 (즉, 문자열 길이가 0보다 큰 경우)
(string.length>0)
리턴 1
하여 코드를 리턴합니다.
string = [string substringToIndex:string.length-1];
삭제할 문자가없는 경우 (예 : 문자열은 0보다 큰)이 아니다
(string.length>0)
반환 0
: 따라서 코드 반환을
string = [string substringToIndex:string.length-0];
방지 충돌합니다.
string != nil && [string length] > 0
. Donal의 문자열 변수가 초과 릴리스되었을 가능성이 있습니다.
여기에 제공된 솔루션은 실제로 멀티 바이트 유니 코드 문자 ( "구성된 문자")를 고려하지 않으며 유효하지 않은 유니 코드 문자열을 초래할 수 있습니다.
실제로 선언이 substringToIndex
포함 된 iOS 헤더 파일 에는 다음 주석 이 포함됩니다.
힌트 : rangeOfComposedCharacterSequencesForRange와 함께 사용하여 구성된 문자가 깨지지 않도록하십시오.
마지막 문자를 올바르게 삭제 하는 방법을rangeOfComposedCharacterSequenceAtIndex:
참조하십시오 .
문서는 당신의 친구이며, 단축 문자열을 반환하는 문자열을 단축 할 수 NSString
있는 호출 substringWithRange
을 지원합니다 . 인스턴스 NSString
는 변경할 수 없습니다. 가있는 경우 문자열을 수정할 수 NSMutableString
있는 메소드 deleteCharactersInRange
가 있습니다.
...
NSRange r;
r.location = 0;
r.size = [mutable length]-1;
NSString* shorted = [stringValue substringWithRange:r];
...
substringWithRange:
반환합니다 NSString*
. 포인터를 기록해 두십시오.