2012-01-28 49 views
0
// self.wordTextField.text = @"32"; 
// self.wordTextField.text = [self.wordTextField.text lowercaseString]; 
// self.wordTextField.text = [self.wordTextField.text stringByReplacingOccurrencesOfString:@" " withString:@"?"]; 

NSString *removeString = @"`[email protected]#$%^&*()_+[]\\{}|;':\",./<>"; 
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 setter不会导致这种行为?这部分作品完美地(用户)所期望的......为什么改变的UITextField导致无限循环在一种情况下,而不是另一个?

+1

您可能会发现'+ [NSCharacterSet characterSetWithCharactersInString:]',' - [NSString rangeOfCharacterFromSet:'和' - [NSString stringByReplacingCharactersInRange:withString:]'useful。或者,更好的是,NSRegularExpression。 – 2012-01-28 08:31:56

回答

1

码再次进入一个循环致电更改回调多次,但是这不是一个无限循环,因为它最终当所有无效字符从停止删除文本。请注意,如果文本不包含任何要删除的字符,则循环中的setter不会被调用。

+0

谢谢!我想这是因为循环或有条件的,但不能把我的手指放在它上面。我很感激! – 404compilernotfound 2012-01-29 22:18:41

相关问题