【发布时间】:2011-04-10 14:30:57
【问题描述】:
我已经编写了这个函数,它可以对NSString 的内容进行洗牌,它似乎可以工作,但时不时会崩溃。这可能是一种迂回的方式,但是我将字符放入数组中,随机交换数组中的元素,然后将数组转回字符串。
我不确定我在做什么是不安全的,这会导致它崩溃。我认为可能是我设置了finalLettersString = result,但我也尝试了finalLettersString = [NSString stringWithString:result],但它也崩溃了。我感到困惑的原因是因为它不会每次都崩溃。我只是一直按随机播放按钮,有时它会崩溃。我应该看看哪些地方?
/* This function shuffles the letters in the string finalLettersString */
-(IBAction)shuffleLetters:(id)sender{
int length = [finalLettersString length];
NSMutableArray * letters = [NSMutableArray arrayWithCapacity:length];
NSLog(@"final letters: %@", finalLettersString);
for(int i = 0; i < length; i++){
char ch = [finalLettersString characterAtIndex:i];
NSLog(@"%c", ch);
NSString * cur = [NSString stringWithFormat:@"%c", ch];
[letters insertObject:cur atIndex:i];
}
NSLog(@"LETTERS:: %@", letters);
for(int i = length - 1; i >= 0; i--){
int j = arc4random() % (i + 1);
//NSLog(@"%d %d", i, j);
//swap at positions i and j
NSString * str_i = [letters objectAtIndex:i];
[letters replaceObjectAtIndex:i withObject:[letters objectAtIndex:j]];
[letters replaceObjectAtIndex:j withObject:str_i];
}
NSLog(@"NEW SHUFFLED LETTERS %@", letters);
NSString * result = @"";
for(int i = 0; i < length; i++){
result = [result stringByAppendingString:[letters objectAtIndex:i]];
}
NSLog(@"Final string: %@", result);
finalLettersString = result;
finalLetters.text = finalLettersString;
}
【问题讨论】:
标签: objective-c nsstring shuffle