IOSのObjective-Cでは、ボタンアクションを使用して文字列の最後の文字を削除するにはどうすればよいですか?
コントローラークラスで、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
}
1行のコードでこれを行うためのおしゃれな方法が必要な場合は、次のように記述できます。
string = [string substringToIndex:string.length-(string.length>0)];
*派手な1行のコードスニペットの説明:
削除する文字がある場合(つまり、文字列の長さが0より大きい)(string.length>0)
は1
を返すため、コードは次のように戻ります。string = [string substringToIndex:string.length-1];
削除する文字がない場合(つまり、文字列の長さが0より大きくない場合)(string.length>0)
は0
を返すため、コードは次のように戻ります。string = [string substringToIndex:string.length-0];
クラッシュを防ぎます。
NSMutableStringの場合(動的に変更するのでお勧めします)、次を使用できます。
[myString deleteCharactersInRange:NSMakeRange([myRequestString length]-1, 1)];
ここで示されている解決策は、実際にはマルチバイトのUnicode文字(「合成文字」)を考慮していないため、無効なUnicode文字列が生じる可能性があります。
実際、substringToIndex
の宣言を含むiOSヘッダーファイルには、次のコメントが含まれています。
ヒント:rangeOfComposedCharacterSequencesForRange:で使用して、合成文字の分割を回避します
rangeOfComposedCharacterSequenceAtIndex:
の使用方法 を参照して、最後の文字を正しく削除してください。
ドキュメンテーションはあなたの友達です。NSString
はsubstringWithRange
呼び出しをサポートします。これは、短縮された文字列を返す文字列を短縮できます。 NSString
のインスタンスは変更できません。それは不変です。 NSMutableString
がある場合、deleteCharactersInRange
と呼ばれるメソッドを使用して、所定の場所で文字列を変更できます
...
NSRange r;
r.location = 0;
r.size = [mutable length]-1;
NSString* shorted = [stringValue substringWithRange:r];
...