8
votes

NsfetchedResultController Sections localisées triées

Comment puis-je utiliser le NsfetchedResultSluTroller avec la touche de tri traduite et la sectionCePathePath?

Problème: j'ai une pièce d'identité dans la propriété "Type" dans la base de données comme Typea, TypeB, TypeC, ... et non la valeur directement car elle devrait être localisée. En anglais typée = oiseau, typeb = chat, typec = chien en allemand, ce serait Vogel, Katze, Hund.

avec une intrigue de NsfetchedResult avec la clé de tri et la sectionNEPATHER sur "Type" Je reçois la commande et les sections - type A - Typeb - typec

Suivant I Traduire pour l'affichage et tout va bien en anglais: - Oiseau - Chat - chien

maintenant je passe en allemand et recevez un mauvais ordre de tri - Vogel - Katze - HUND

Parce qu'il trie toujours par Typea, Typeb, Typec

Donc, je cherche un moyen de localiser le tri pour la NsfetchedResultController.

J'ai essayé l'approche de la propriété transitoire, mais cela ne fonctionne pas pour la clé de tri, car la clé de tri doit être dans l'entité.

Je n'ai aucune autre idée. Mais je ne peux pas croire que ce n'est pas possible d'utiliser NsfetchedResultController sur un attribut dérivé requis pour la localisation?

Il y a des discussions connexes telles que Utilisation de sections personnalisées avec NsfetchedResultSlonTroller? mais la différence est la différence que les noms de section personnalisés et la clé de tri ont probablement le même ordre. Pas dans mon cas et c'est la principale différence.

à la fin, j'aurais besoin d'une commande de tri pour la NSSorteDescriptor nécessaire sur un attribut dérivé, je suppose. Cet ordre de tri doit également servir pour la sectionNYPATHE.

Merci pour tout indice.


0 commentaires

3 Réponses :


0
votes

à la fin, j'aurais besoin d'une commande de tri pour le NSSorteDescriptor nécessaire sur un attribut dérivé, je suppose.

Pour le tri, une possibilité serait de faire quelque chose comme: xxx

traduitcompare est une méthode de comparaison que vous écrivez (en tant que catégorie sur Nstring) qui localise les valeurs avant de les comparer.

Je ne sais pas sur la façon de gérer le sectionNYPATHE.


2 commentaires

Oui, j'ai essayé cela à un certain point. Mais pour être honnête, je n'ai pas pu convaincre Nstring à l'aide de cette catégorie de comparaison définie ... Je ne m'attendais pas à ce que SectionKeyPath soit un problème car je pourrais utiliser la propriété transitoire ici qui doit correspondre à l'ordre de tri du tri localisé. du descripteur de tri.


Je l'ai donné un autre essai. Veuillez vous reporter à la réponse "J'ai essayé à nouveau avec le comparatif personnalisé ..." (Trop longtemps pour un commentaire).



0
votes

Je suppose que le problème est causé par le cache.

Vous pouvez définir le cache avec le nom donné lorsque vous créez un objet NsfetchedResultController à l'aide de la méthode suivante. La dernière variable est le nom du cache. P>

- (id)initWithFetchRequest:(NSFetchRequest *)fetchRequest managedObjectContext:(NSManagedObjectContext *)context sectionNameKeyPath:(NSString *)sectionNameKeyPath cacheName:(NSString *)name


1 commentaires

Merci pour votre réponse. J'ai essayé cela, mais je n'ai pas vu une différence. Le problème se produit non seulement en passant d'une langue à une autre, il arrive également si je reste dans une langue de langue.



3
votes

OK, pas une belle solution mais à la fin, cela fonctionne (car j'ai un ensemble limité défini d'enregistrements Ca. 100):

sur conditionner l'application:

  • Je crée un attribut "ordre by" de l'objet géré.
    • Je vérifie si la localisation (et avec l'ordre de tri) a changé depuis la dernière fois. Si oui:
    • Je vais chercher tous les enregistrements et triez-le dans un nsarray par des noms localisés.
    • J'écris les enregistrements dans le magasin

      Pour la raison de la perforation, je n'atteignez et trier les enregistrements en fonction d'un NSpredicate.

      que je peux utiliser tout le code existant à l'aide de la section "Commande par" comme clé de tri et chemin de clés de la section.

      Je sais que je pourrais utiliser mon tableau commandé en tant que DataSource pour la vue de la table, mais je voulais conserver le code existant et utiliser les méthodes de NsfetchedResultSluStroller.

      comme une commodité de cela, j'ai un contrôle total sur le tri, qui correspondra à mes besoins à l'avenir, car je prévois de créer un ordre de tri plus complexe (emplacement basé sur une probabilité plus élevée d'utilisation des enregistrements en haut, etc. )

      Cependant, ce n'est pas une solution élégante.


0 commentaires