web-dev-qa-db-fra.com

Accéder au dictionnaire iOS par programmation

Je cherche un moyen d'accéder au dictionnaire iOS par programmation. Ce dont j'ai besoin, c'est de récupérer la liste des mots d'une langue particulière à l'intérieur d'une application personnalisée. 
C'est possible? Existe-t-il des API fournissant cette fonctionnalité (ou une fonctionnalité similaire)? 
J'ai consulté la documentation Apple, mais je n'ai rien trouvé d'utile ... Quelqu'un peut-il m'indiquer la bonne direction?

28
Manlio

Je ne pense pas qu'il existe une API publique pour accéder au dictionnaire intégré. Le plus proche utilise UITextChecker mais cela peut ne pas répondre à vos besoins

Au lieu de cela, vous pourriez trouver et intégrer un dictionnaire Word dans la langue de votre choix? Cela peut nécessiter du travail supplémentaire

12
Suhail Patel

Il est une API permettant d’afficher l’interface utilisateur du dictionnaire intégré (pas la question initiale, mais soulevée dans certaines réponses), notamment en vérifiant si un mot donné est défini:

if ([UIReferenceLibraryViewController dictionaryHasDefinitionForTerm:@"Word"]) {
    UIReferenceLibraryViewController* ref = 
        [[UIReferenceLibraryViewController alloc] initWithTerm:@"Word"];
    [currentViewController presentViewController:ref animated:YES completion:nil];
}
33
mrzzmr

Il n'y a pas d'API, mais si vous avez seulement besoin d'une liste de mots, vous pouvez la lire à partir de /usr/share/dict/words:

    NSString *allTheWords = [NSString stringWithContentsOfFile: @"/usr/share/dict/words"
                                                      encoding: NSUTF8StringEncoding
                                                         error: nil];
    for (NSString *line in [allTheWords componentsSeparatedByString:@"\n"]) {
        NSLog(@"%@",line);
    }

Si vous avez besoin d’une liste de mots arbitraire, vous pouvez l’obtenir de plusieurs ressources en ligne, voici one . Le README dans/usr/share/dict/README indique que la liste de mots iOS utilise ftp://ftp.ox.ac.uk/pub/wordlists

Pour une recherche instantanée, vous devez charger les mots sur une structure appropriée à la recherche par préfixe, comme un tri. Voici un exemple de projet où je viens de faire cela. 

Si vous avez besoin d’un dictionnaire, mettez-le en ligne, puis incluez un pointeur vers l’entrée Word dans le noeud. Si le chargement prend trop de temps, vous pouvez expérimenter le chargement en arrière-plan, la compression ou la sérialisation du fichier.

10
Jano

Il n'y a pas d'API pour faire ce que vous demandez.

3
Dave DeLong

J'ai rencontré un problème similaire il y a longtemps et j'ai fait ce que d'autres personnes ont suggéré: incorporer un dictionnaire anglais dans mon application. Depuis lors, j'ai transformé ma solution en une bibliothèque statique disponible sur www.lexicontext.com (notez que cela coûte quelques dollars). Compte tenu du nombre de développeurs qui l'ont téléchargé, cela semble être un problème courant ... 

2
Ori

Même s'il n'y a pas d'API, elle peut être utilisée automatiquement si l'utilisateur appuie longuement sur le mot sélectionné.

0
Forrest

Si vous pouvez utiliser l'API privée, vous pouvez utiliser le code suivant pour définir un mot:

_UIDictionaryManager *manager = [%c(_UIDictionaryManager) assetManager];
id definitions = [manager _definitionValuesForTerm:[self queryString]];
for(_UIDefinitionValue *item in definitions) {
        myModel = self;
        NSMutableAttributedString *def = [item definition];
        NSString *str = [def string];
        HBLogDebug(@"%@ = %@", [item localizedDictionaryName], str);
}
0
twodayslate