// 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不会导致这种行为?该部分完美地工作(用户)期望......
答案 0 :(得分:1)
代码通过多次调用您的更改回调再次进入循环,但这不是无限循环,因为它最终会在从文本中删除所有无效字符时停止。请注意,如果文本不包含要删除的任何字符,则不会调用循环内的setter。