// 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 setter 和条件语句不会导致这种行为?该部分如(用户(所期望的那样完美运行......
代码通过多次调用更改回调再次进入循环,但这不是无限循环,因为当从文本中删除所有无效字符时,它最终会停止。请注意,如果文本不包含任何要删除的字符,则不会调用循环中的资源库。