2010-09-14 3 views
2

Я пытаюсь проверить строку, чтобы увидеть, есть ли в ней какие-либо слова с ошибками. Я использую яблоки UITextChecker класса сделать это следующим образом:всегда возвращает false iphone obj c question

#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"); 
     } 
    } 

Он всегда возвращает «Слова были найдены неправильно», независимо от того, каких слов ставятся в

Что я делаю не так ??

Спасибо!

ответ

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)
+0

Итак, для временного обходного пути, что я сделал, включите мое слово в предложение, а затем проверьте предложение с их исходным кодом. Работал для меня: D Кроме того, их [[UITextChecker availableLanguages] objectAtIndex: 0]; возвращал «pt_PT», который я решительно настроил на «en_US». – dytrivedi

+0

Кроме того, NSRange stringRange = NSMakeRange (0, theText.length-1); должен быть изменен на NSRange stringRange = NSMakeRange (0, theText.length); – dytrivedi

+0

Правильно, я просто сделаю это сейчас. Спасибо, парень. Должны ли мы предоставить отчет об ошибке для яблока? – Bdennis317

4

Какие примеры слов вы испытываете? Я предполагаю, что ваша проблема, вероятно, в том, что stringRange установлен в {0,2}, поэтому он проверяет только первые два символа в строке для слов с ошибками. Если эти первые два символа не являются словом, я предполагаю, что он говорит, что он написан неправильно. Попробуйте установить его на {0,string.length} и посмотрите, что произойдет.

+0

Привет, спасибо, но я попробовал это тоже. Я только пытаюсь проверить строку, которая составляет всего 3 символа. (0, 1, 2) три символа. Я пошел вперед и попробовал это так, как вы предложили ... тот же результат: /. Я застрял! Любая помощь очень ценится! – Bdennis317

+0

Возможно, вам стоит попробовать еще несколько NSLogs. Например, NSLog currentText перед вызовом метода, тогда NSLog подстрока, которая, по ее словам, написана с ошибкой после ее обнаружения. И с NSRange 0,2 вы проверяете только первые 2 символа. Первое значение - это местоположение, а второе - длина диапазона. –

+0

О, я стою исправленным на NSRange. Как я могу NSLog NSRange. Я не уверен, что использовать для указателя (?), Например NSLog (@ «Диапазон:% @», currentRange); Это дает мне некоторую ошибку и сбои. Что я должен положить вместо% @? – Bdennis317

Смежные вопросы