您可以使UITextChecker准确无误地工作,而不需要添加新的字典。
我使用了一个两步骤的处理过程,因为需要第一步骤快速(但不准确)。您可能只需要第二步骤,即准确检查。请注意,这利用了UITextChecker的completionsForPartialWordRange函数,这就是为什么它比MisspelledWord函数更准确的原因。
// 第一步:我快速检查组合字母是否通过拼写检查。虽然不太准确,但非常快速,因此我可以快速排除很多字母组合(蛮力方法)。
UITextChecker *checker;
NSString *wordToCheck = @"whatever"; // The combination of letters you wish to check
// Set the range to the length of the word
NSRange range = NSMakeRange(0, wordToCheck.length - 1);
NSRange misspelledRange = [checker rangeOfMisspelledWordInString:wordToCheck range: range startingAt:0 wrap:NO language: @"en_US"];
BOOL isRealWord = misspelledRange.location == NSNotFound;
// Call step two, to confirm that this is a real word
if (isRealWord) {
isRealWord = [self isRealWordOK:wordToCheck];
}
return isRealWord; // if true then we found a real word, if not move to next combination of letters
// 第二步:额外检查以确保这个单词是真实存在的。如果我们有一个真实存在的单词,则返回true。
-(BOOL)isRealWordOK:(NSString *)wordToCheck {
if ([UITextChecker hasLearnedWord:wordToCheck]) {
return NO;
}
NSRange range = NSMakeRange(0, wordToCheck.length - 1);
NSArray *guesses = [checker completionsForPartialWordRange:range inString:wordToCheck language:@"en_US"];
for (NSString *guess in guesses) {
if ([guess isEqualToString:wordToCheck]) {
return YES;
}
}
NSLog(@"Word not found in second dictionary check:%@",wordToCheck);
return NO;
}