Перемешивание букв в NSString в Objective-C

Я написал эту функцию, которая перемешивает содержимое NSString , и, похоже, она работает, но теперь а потом вылетает. Это может быть окольный путь, но я помещаю символы в массив, меняю местами элементы в случайном порядке, а затем превращаю массив обратно в строку.

Я не уверен, что я делаю, что небезопасно, что приводит к сбою. Я думал, что, возможно, я устанавливаю finalLettersString = result , но я также попробовал finalLettersString = [NSString stringWithString: результат] , и это тоже дает сбой. Причина, по которой я смущен, заключается в том, что он не вылетает каждый раз. Я просто продолжаю нажимать кнопку перемешивания, и иногда она вылетает. В каких местах я должен искать?

/* 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;
}
7
задан jkeesh 10 September 2010 в 06:29
поделиться