2011-11-01 74 views

回答

2

像這樣的東西應該工作:

@interface NSMutableArray (JRAdditions) 

- (void) replaceStringObjectsContainingString:(NSString *) str withString:(NSString *) newString; 

@end 

@implementation NSMutableArray (JRAdditions) 

- (void) replaceStringObjectsContainingString:(NSString *) str withString:(NSString *) newString { 

    for(unsigned i = 0; i < [self count]; ++i) { 
     id obj = [self objectAtIndex:i]; 

     if(![obj isKindOfClass:[NSString class]]) continue; 

     NSString *replaced = [str stringByReplacingOccurrencesOfString:str withString:newString]; 
     [self replaceObjectAtIndex:i withObject:replaced]; 

    } 
} 

@end 

你會再使用它作爲這樣的:對於檢查範圍:@「文本」對象rangeOfString]

NSMutableArray *array = ...; 

[array replaceStringObjectsContainingString:@"blah" withString:@"foo"]; 
-1

您可以陣列上重複,做每個對象的檢查,然後在必要時更換。

或者你可以使用一些與票友:

- (void)makeObjectsPerformSelector:(SEL)aSelector withObject:(id)anObject 

我還沒有嘗試過,但你可以創建你的對象的方法,需要一個字典,或者第一個元素是比較文本和第二陣列元素中的文本替換:

- (void) replaceTextWithParameters:(NSArray*)parameters { 
    if([self.yourText isEqualToString:[parameters objectAtIndex:0]) { 
     self.yourText = [parameters objectAtIndex:1]; 
    } 
} 

那麼你就只需要撥打:

NSArray *parameterArray = [NSArray arrayWithObjects:@"Text to search", @"replacementText", nil]; 
[yourArray makeObjectsPerformSelector:@selector(replaceTextWithParameters:) withObject:parameterArray]; 

這將是很多在運行時的速度比你的循環數組(尤其是如果你有很多的元素)中的每個元素

+0

你能舉一個例子 - 我不知道你在做什麼... – pixelbitlabs

+0

我編輯了我的答案樣本給你的想法(未經測試) – vdaubry

+0

@vdaubry'makeObjectsPerformSelector' *確實*執行循環。沒有區別。 –

1

您可以循環在NSMutableArray中的所有對象進行內部檢查,使用 。

相關問題