2010-09-14 5 views
2

J'essaie de vérifier une chaîne pour voir s'il y a des mots mal orthographiés dedans. J'utilise des pommes UITextChecker classe pour le faire comme ceci:retourne toujours faux 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"); 
     } 
    } 

Il retourne toujours « Les mots ont été trouvés mal », peu importe ce que les mots est mis en

Qu'est-ce que je fais mal ??

Merci!

Répondre

1

Version finale. Le code qui fonctionne pour moi (même pour un seul mot) -

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

note deux changements contre le code d'origine d'Apple:

  • langue est avec force réglé sur @ "en_US" [[UITextChecker availableLanguages] objectAtIndex: 0]; retourné @ "pt_PT".
  • plage est (0, longueur) au lieu de (0, longueur - 1)
+0

Donc, pour une solution de contournement temporaire, ce que j'ai fait était, inclure mon mot dans une phrase, puis tester la phrase avec leur code d'origine. A travaillé pour moi: D Et aussi, leurs [[UITextChecker availableLanguages] objectAtIndex: 0]; renvoyait "pt_PT" que j'ai forcé à "en_US". – dytrivedi

+0

NSRange stringRange = NSMakeRange (0, theText.length-1); doit être changé en NSRange stringRange = NSMakeRange (0, theText.length); – dytrivedi

+0

Bon, je vais le faire pour l'instant. Merci mec. Devrions-nous soumettre un rapport de bug à Apple? – Bdennis317

4

Quels exemples de mots testez-vous? Je suppose que votre problème est probablement le fait que stringRange est défini sur alors il vérifie uniquement les deux premiers caractères de la chaîne pour les mots mal orthographiés. Si ces deux premiers caractères ne sont pas un mot, alors je suppose qu'il dit qu'il est mal orthographié. Essayez de le définir à {0,string.length} à la place et voir ce qui se passe.

+0

Salut, merci mais j'ai essayé aussi. J'essaye seulement de vérifier une chaîne qui est seulement 3 caractères. (0, 1, 2) trois caractères. Je suis allé de l'avant et essayé comme vous l'avez suggéré ... même résultat: /. Je suis coincé! Toute aide est grandement appréciée! – Bdennis317

+0

Peut-être que vous devriez essayer plus de NSLogs. Comme, NSLog the currentText avant d'appeler la méthode, puis NSLog la sous-chaîne qu'il dit est mal orthographiée après l'avoir trouvé. Et avec un NSRange de 0,2, vous vérifiez seulement les 2 premiers caractères. La première valeur est l'emplacement et la seconde est la longueur de la plage. –

+0

Oh je me suis corrigé sur le NSRange. Comment puis-je NSLog le NSRange. Je ne suis pas sûr de ce qu'il faut utiliser pour le pointeur (?) Comme NSLog (@ "La plage est% @", currentRange); Cela me donne une erreur et des plantages .. Que dois-je mettre à la place de% @? – Bdennis317

Questions connexes