0

NSString から部分文字列を動的に追加および削除しています -

特定のアクションで使用して追加しています(新しい文字列を追加するときにコンマ区切りを使用しています)-

self.selectedString = [self.selectedString length] < 1 ? newSelectedString 
                                                       : [self.selectedString stringByAppendingFormat:@",%@",newSelectedString];

削除 - 文字列を削除するときに、このコンマが問題を引き起こしています。現在、私はこれの解決策を次のように使用しています-

self.selectedString = [self.selectedString stringByReplacingOccurrencesOfString:newSelectedString
                                                                     withString:@""];

NSRange rangeSingleComma = [self.selectedString rangeOfString:@","];
NSRange rangeDoubleComma = [self.selectedString rangeOfString:@",,"];
if (rangeSingleComma.location == [self.selectedString length] - 1) {
    self.selectedString = [self.selectedString substringToIndex:[self.selectedString length] - 1];
}
if (rangeSingleComma.location == 0) {
    self.selectedString = [self.selectedString substringFromIndex:1];
}
if (rangeDoubleComma.location != NSNotFound) {
    self.selectedString = [self.selectedString stringByReplacingOccurrencesOfString:@",,"
                                                                         withString:@","];
 }

しかし、これは非常に汚いアプローチです。誰もがこれに適したアプローチを提案できます。

4

2 に答える 2

5

あなたはこのようなことをすることができます

NSString *str = @"aaa,bbb,ccc";
NSMutableArray *arr = [[str componentsSeparatedByString:@","] mutableCopy];

int indexToRemove = -1;
for (int i = 0; i < arr.count; i++) {
    NSString *string = [arr objectAtIndex:i];
    if([string isEqualToString:@"aaa"])
    {
        indexToRemove = i;
        break;
    }
}

if(indexToRemove != -1)
{
    [arr removeObjectAtIndex:indexToRemove];
}

NSString *newString = [arr componentsJoinedByString:@","];
于 2012-06-13T06:43:11.137 に答える
2

このカンマ区切りのリストを文字列として保存する必要がありますか? 代わりに、NSString の NSArray/NSMutableArray を維持してみてください。これにより、任意の項目を自由に追加または削除することが容易になります。配列のカンマ区切りの文字列表現が必要な場合は、次のようにします。

 [self.selectedArray componentsJoinedByString:@","]

プロパティを引き続き使用する場合self.selectedStringは、上記のコード行を getter メソッドに追加します。

 - (NSString *) selectedString {
      return [self.selectedArray componentsJoinedByString:@","]
 }
于 2012-06-13T06:41:33.093 に答える