Câu trả lời:
Trong lớp trình điều khiển của bạn, tạo một phương thức hành động, bạn sẽ nối nút lên trong Trình tạo giao diện. Bên trong phương thức đó, bạn có thể cắt chuỗi của mình như thế này:
if ([string length] > 0) {
string = [string substringToIndex:[string length] - 1];
} else {
//no characters to delete... attempting to do so will result in a crash
}
Nếu bạn muốn một cách thú vị để làm điều này chỉ trong một dòng mã, bạn có thể viết nó thành:
string = [string substringToIndex:string.length-(string.length>0)];
* Giải thích về đoạn mã một dòng ưa thích:
Nếu có một ký tự cần xóa (nghĩa là độ dài của chuỗi lớn hơn 0)
(string.length>0)
trả về, 1
do đó, trả về mã:
string = [string substringToIndex:string.length-1];
Nếu KHÔNG có ký tự để xóa (nghĩa là độ dài của ký tự chuỗi KHÔNG lớn hơn 0)
(string.length>0)
trả về, 0
do đó làm cho mã trả về:
string = [string substringToIndex:string.length-0];
Điều này ngăn sự cố.
string != nil && [string length] > 0
. Cơ hội là biến chuỗi của Donal đang được phát hành.
Nếu đó là NSMutableString (mà tôi muốn giới thiệu vì bạn đang thay đổi nó một cách linh hoạt), bạn có thể sử dụng:
[myString deleteCharactersInRange:NSMakeRange([myRequestString length]-1, 1)];
Các giải pháp được đưa ra ở đây thực sự không tính đến các ký tự Unicode nhiều byte ("ký tự tổng hợp") và có thể dẫn đến các chuỗi Unicode không hợp lệ.
Trong thực tế, tệp tiêu đề iOS có chứa phần khai báo substringToIndex
chứa nhận xét sau:
Gợi ý: Sử dụng với RangeOfComposesCharacterSequencesForRange: để tránh phá vỡ các ký tự sáng tác
Xem cách sử dụngrangeOfComposedCharacterSequenceAtIndex:
để xóa ký tự cuối cùng một cách chính xác.
Tài liệu này là bạn của bạn, NSString
hỗ trợ một cuộc gọi substringWithRange
có thể rút ngắn chuỗi mà bạn có trả về Chuỗi rút ngắn. Bạn không thể sửa đổi một thể hiện của NSString
nó là bất biến. Nếu bạn có NSMutableString
một phương thức được gọi là deleteCharactersInRange
có thể sửa đổi chuỗi tại chỗ
...
NSRange r;
r.location = 0;
r.size = [mutable length]-1;
NSString* shorted = [stringValue substringWithRange:r];
...
substringWithRange:
trả lại a NSString*
. Hãy lưu ý về con trỏ.