Почему изменение UITextField вызывает бесконечный цикл в одном случае, но не в другом? - PullRequest
0 голосов
/ 28 января 2012
//  self.wordTextField.text = @"32";
//  self.wordTextField.text = [self.wordTextField.text lowercaseString];
//  self.wordTextField.text = [self.wordTextField.text stringByReplacingOccurrencesOfString:@" " withString:@"?"];

NSString *removeString = @"`1234567890-=~!@#$%^&*()_+[]\\{}|;':\",./<>";
NSMutableSet *removeSet = [NSMutableSet set];
for (unsigned i = 0; i < removeString.length; i++) {
    NSRange range; range.location = i; range.length = 1;
    NSString *char_ = [removeString substringWithRange:range];
    [removeSet addObject:char_];
}
for (unsigned i = 0; i < self.wordTextField.text.length; i++) {
    NSRange range; range.location = i; range.length = 1;
    NSString *thisLetter = [self.wordTextField.text substringWithRange:range];
    if ([removeSet containsObject:thisLetter]) {
        self.wordTextField.text = [self.wordTextField.text stringByReplacingOccurrencesOfString:thisLetter 
                                                                                     withString:@""];
        i--;
    }
}

Все три закомментированные строки приводят к тому, что мой метод входит в бесконечный цикл, потому что self.wordTextField.text находится внутри метода, который вызывается при изменении редактирования, поэтому, очевидно, моя установка свойства text вызывает больше редактированияизменить, в результате чего в цикле.Мой вопрос: почему установщик .text в цикле и условные операторы не вызывают такое поведение?Эта часть работает отлично, как и ожидал пользователь ...

1 Ответ

1 голос
/ 28 января 2012

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...