Вопрос по cocoa, objective-c, iphone, cocoa-touch – Цель C - удалить последний символ из строки

149

В Objective C для iPhone, как мне удалить последний символ строки, используя действие кнопки.

Ваш Ответ

4   ответа
8

приведенные здесь, на самом деле не учитывают многобайтовые символы Юникода («составные символы») и могут привести к неправильным строкам Юникода.

На самом деле, заголовочный файл iOS, который содержит объявлениеsubstringToIndex содержит следующий комментарий:

Hint: Use with rangeOfComposedCharacterSequencesForRange: to avoid breaking up composed characters

Увидетькак пользоватьсяrangeOfComposedCharacterSequenceAtIndex: правильно удалить последний символ.

415

к которому вы подключите кнопку в Интерфейсном Разработчике. Внутри этого метода вы можете обрезать вашу строку следующим образом:


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)
& # XA0; & # xA0; & # xA0; & # xA0; & # xA0;(string.length>0) возвращается1  таким образом, возвращая код:
& # XA0; & # xA0; & # xA0; & # xA0; & # xA0; & # xA0; & # xA0; & # xA0; & # xA0; & # xA0;string = [string substringToIndex:string.length-1];

Если нет символа для удаления (т.е. длина строки НЕ больше 0)
& # XA0; & # xA0; & # xA0; & # xA0; & # xA0;(string.length>0) возвращается0  таким образом, возвращая код:
& # XA0; & # xA0; & # xA0; & # xA0; & # xA0; & # xA0; & # xA0; & # xA0; & # xA0; & # xA0;string = [string substringToIndex:string.length-0];
& # xA0; & # xA0; & # xA0; & # xA0; & # xA0; Что предотвращает сбои.

Я получаю ошибку EXC_BAD_ACCESS, когда я пытаюсь это
@DonalRafferty убедитесь, что ваша строка не ноль
Имеет ли "строка" обратитесь к & quot; string.text & quot; или просто имя строки Omar
У вашего решения есть ошибка на 1. Это должно быть [string substringToIndex: [длина строки] - 1];
Спасибо, Джим, было слишком рано для арифметики. :) Омар, строка относится к переменной с именем string, которая содержит текст, который вы хотите изменить. Вы можете взглянуть на документацию для различных способов создания объекта NSString, либо из файла на диске, либо из данных в вашем приложении.
5

NSString поддерживает вызовsubstringWithRange это может сократить строку, что у вас есть возвращенная сокращенная строка. Вы не можете изменить экземплярNSString это неизменно. Если у вас естьNSMutableString имеет метод с именемdeleteCharactersInRange который может изменить строку на месте

...
NSRange r;
r.location = 0;
r.size = [mutable length]-1;
NSString* shorted = [stringValue substringWithRange:r];
...
@Harald,substringWithRange: возвращаетNSString*, Обратите внимание на указатель.
NSMakeRange иногда может сделать заполнение структуры диапазона более элегантным.
51

поскольку вы меняете его динамически), вы можете использовать:

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

Похожие вопросы