2012-01-28 6 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 설정자가이 동작을 일으키는 이유는 무엇입니까? 그 부분은 (사용자) 기대대로 완벽하게 작동합니다 ...UITextField를 변경하면 한 케이스에서는 무한 루프가 발생하지만 다른 케이스에서는 무한 루프가 발생하는 이유는 무엇입니까?

+1

'+ [NSCharacterSet characterSetWithCharactersInString :]','- [NSString rangeOfCharacterFromSet :','- [NSString stringByReplacingCharactersInRange : withString :]'이 유용 할 수 있습니다. 또는 더 나은 방법은 NSRegularExpression입니다. –

답변

1

코드는 여러 번 변경 콜백을 호출하여 루프에 들어가지만 무효 루프가 아닌 것은 모든 잘못된 문자가 제거되면 결국 중지되기 때문입니다 텍스트 텍스트에 제거 할 문자가 없으면 루프 내의 setter가 호출되지 않습니다.

+0

감사합니다. 나는 그것이 루프 또는 조건 적 때문이라고 생각했지만 내 손가락을 그 위에 놓을 수는 없었다. 감사합니다! – 404compilernotfound

관련 문제