2010-11-07 7 views
1

je travaille avec 2 entités CoreData:Comment simuler une gauche se joindre à CoreData sur iphone

  • travailleur
  • bureau

Un travail des travailleurs dans l'un (et un seul) Bureau.
Un bureau est occupé par plusieurs travailleurs.

Maintenant, je voudrais remplir un TableView avec les travailleurs, regroupés par bureau. Cela représente la vue de la table:

Section 1: Bureau 1
.......... Travailleur 1
.......... Travailleur 2
... ....... travailleur 3
Section 2: Bureau 2 (vide)
Section 3: Bureau 3
.......... travailleur 4
........ ..Worker 5

En SQL je pouvais utilisez cette requête:

SELECT * 
FROM office 
LEFT JOIN worker ON office.officeId = worker.officeId 
order by office.name, worker.name 

travaille maintenant avec les données de base, je suis face à quelques problèmes:

  • Si j'aille chercher bureau, je peux accéder aux travailleurs (de la relation) comme un ensemble, mais n'est pas adapté pour fonctionner avec la vue de table (pour le tri et la manipulation)
  • Si je récupère le travail et accède au bureau via la relation, les bureaux vides ne sont pas récupérés.

Comment puis-je récupérer des données de ce type avec des coredata?

Merci

Répondre

1

Je voudrais aller chercher les bureaux, puis simplement trier les travailleurs (alphabétiquement, selon un attribut de rang, etc) pour l'affichage dans le tableau. Il sera probablement judicieux de faire une méthode sur votre classe d'entité Office pour renvoyer un tableau trié pour les travailleurs, par exemple:

@implementation Office 

- (NSArray *)sortedWorkers 
{ 
    return [self.workers sortedArrayUsingDescriptors: 
      [NSArray arrayWithObjects: 
      [NSSortDescriptor sortDescriptorWithKey:@"lastName" ascending:YES], 
      [NSSortDescriptor sortDescriptorWithKey:@"firstName" ascending:YES], 
      nil]]; 
} 
1

Fetch vos travailleurs et utilisent les bureaux pour les sections que vous avez déjà fait. Les bureaux vides ne doivent pas être affichés dans un UITableView car cela va à l'encontre du HIG.

Questions connexes