2010-02-03 7 views
1

J'ai un données de base complexe cartographie dans mon application, simplifié aux petites tapes pertinentes à cette question ici dans cette image:Ordonné Core Data table de jointure Efficiencies

alt text http://grab.by/2aLT

Ma question est de savoir comment se organisait Foo efficacement. Disons que dans un de mes points de vue, j'ai une table sectionnée avec chaque truc dedans. Les sections sont les catégories. Chaque section de foo (dans une catégorie) a un ordre.

Maintenant, je les chercher en utilisant cet algorithme:

  1. Fetch une liste de toutes les catégories, triées par nom
  2. Pour chaque catégorie, chercher la Classé Foos, triés par index croissant
  3. Pour chaque SortedFoo, récupérer le Foo associé, coller dans un tableau
  4. Prenez les Foos, maintenant triés par index dans un tableau, et ajoutez ce tableau à un tableau 2D
  5. Renvoyez le tableau 2D comme foo ordonné dans chaque tableau catégorie phabétisée.

Cela semble tellement ineooooo inefficace pour moi. Sûrement il doit y avoir une meilleure façon de faire ce type commun de recherche. Quelqu'un peut-il suggérer une nouvelle façon de le faire?

Répondre

2

Je rendrais l'index de tri foo universel dans toutes les catégories. Ensuite, récupérez tous les objets Foo triés par l'index.

Si vous utilisiez un contrôleur de résultats récupéré, vous utiliseriez alors le nom de catégorie comme chemin de clé de nom de section. Sinon, vous pouvez les partitionner manuellement par le nom de la catégorie.

MISE À JOUR
En fait, l'indice gardant la façon dont vous l'avez, vous pourriez chercher tous les objets Foo et trier d'abord par catégorie, puis par l'indice SortFoos. Vous devrez toujours les partitionner manuellement par le nom de la catégorie.

MISE À JOUR 2
Par exemple:

NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"sorted_positions.category.name" ascending:YES]; 
NSSortDescriptor *sortDescriptor2 = [[NSSortDescriptor alloc] initWithKey:@"sorted_positions.index" ascending:YES]; 
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, sortDescriptor2, nil]; 
[fetchRequest setSortDescriptors:sortDescriptors]; 
+0

pourrait vous donner un exemple de code rapide de ce que vous entendez par la partie mise à jour? – coneybeare

+0

J'ai fini par mettre au rebut l'ensemble commandé dans une catégorie et je m'organise par nom. Rendre ma vie et mon code beaucoup plus facile – coneybeare

+0

J'ai ajouté un exemple de code de toute façon. – gerry3