2014-11-02 56 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