2014-11-02 75 views
1

我已经寻找的帮助,并找不到它在这里。我有一个检查拼写的按钮,然后用猜测替换单词。我在按钮里面有下面的代码:UITextChecker崩溃时,它不能猜字

UITextChecker *checker = [[UITextChecker alloc] init]; 
NSRange checkRange = NSMakeRange(0, [input length]); 
NSRange misspelledRange = [checker rangeOfMisspelledWordInString:input 
                  range:checkRange 
                 startingAt:checkRange.location 
                  wrap:NO 
                 language:@"en_US"]; 

NSArray *arrGuessed = [checker guessesForWordRange:misspelledRange inString:input language:@"en_US"]; 
if (misspelledRange.location != NSNotFound) { 
    input = [input stringByReplacingCharactersInRange:misspelledRange 
              withString:[arrGuessed objectAtIndex:0]]; 
} 

它确实修复了一些词,但不是全部。如果它发现一个单词,它不会猜测它会崩溃并关闭应用程序。我该如何解决这个问题?如果它无法猜测这个词,我希望它忽略这个过程。 iOS文档和API参考指出,如果它找不到任何内容,它将返回一个空数组,但它为什么会崩溃?

以下是错误:

Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[__NSArrayM objectAtIndex:]: index 0 beyond bounds for empty array' 

回答

0

您必须检查至少还有一个猜测。这就是为什么它的崩溃,你想索引到一个空数组:

NSArray *arrGuessed = [checker guessesForWordRange:misspelledRange inString:input language:@"en_US"]; 
// Check if we have a misspelled range and any guesses 
if ([arrGuessed count] > 0 && misspelledRange.location != NSNotFound) { 
    input = [input stringByReplacingCharactersInRange:misspelledRange withString:arrGuessed[0]]; 
} 
+0

谢谢!这确实很有效! – 2014-11-02 18:48:03