总是返回错误的iphone obj c问题

时间:2010-09-14 23:21:01

标签: iphone cocoa-touch

我正在尝试检查字符串以查看其中是否有任何拼写错误的单词。 我正在使用苹果UITextChecker类这样做:

#import <UIKit/UITextChecker.h>
        id textChecker = [UITextChecker new];

        NSInteger currentOffset = 0;
        NSRange currentRange = NSMakeRange(0, 0);
        NSRange stringRange = NSMakeRange(0, 2);
        NSArray *guesses;
        NSString *theLanguage = [[UITextChecker availableLanguages] objectAtIndex:0];
        if (!theLanguage)
            theLanguage = @"en_US";


    currentRange = [textChecker rangeOfMisspelledWordInString:currentText range:stringRange
                                                           startingAt:currentOffset wrap:NO language:theLanguage];

    //  NSLog("@currentRange is %i", currentRange);
        if (currentRange.location == NSNotFound) {
                NSLog(@"No wrong words");
            }
        else {
            NSLog(@"Words were found wrong");
        }
    }

无论输入什么词,它总会返回“发现错误的词”

我做错了什么?

谢谢!

2 个答案:

答案 0 :(得分:4)

您正在测试哪些单词示例?我猜你的问题可能是stringRange被设置为{0,2}的事实所以它只检查字符串中的前两个字符是否拼写错误。如果前两个字符不是单词,那么我认为它说它拼写错误。尝试将其设置为{0,string.length},看看会发生什么。

答案 1 :(得分:1)

最终版本。适用于我的代码(即使是一个单词) -

NSRange range = NSMakeRange(0, 0);
range = [textChecker rangeOfMisspelledWordInString:[currentWord lowercaseString] 
                                             range:NSMakeRange(0, [currentWord length]) 
                                        startingAt:0 
                                              wrap:NO 
                                          language:@"en_US"];
if (range.location == NSNotFound) {
    NSLog(@"Word found");
}

请注意针对Apple原始代码的两项更改:

  • 语言强制设置为@“en_US”为[[UITextChecker availableLanguages] objectAtIndex:0];返回@“pt_PT”。
  • 范围是(0,长度)而不是(0,长度-1)