回答:
コントローラークラスで、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];
これにより、クラッシュが防止されます。
string != nil && [string length] > 0
です。Donalの文字列変数が過剰にリリースされている可能性があります。
ここに示すソリューションは、実際にはマルチバイトの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];
...
substringWithRange:
返しますNSString*
。ポインタに注意してください。