-1

Vous souhaitez trier par nom qui ont une relation un à un en utilisant NSSortDescriptor dans NSFetchedResultsController. Voici mon codeNSFetchedResultsController avec NSSortDescriptor un à un

NSFetchRequest <studentDetail *> *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:[studentDetail entityName]]; 

NSSortDescriptor *sortDescriptorForSchoolName = [NSSortDescriptor sortDescriptorWithKey:NSStringFromSelector(@selector(schoolName)) 
                      ascending:YES 
                       selector:@selector(localizedCaseInsensitiveCompare:)]; 

NSSortDescriptor *sortDescriptorForSchool = [NSSortDescriptor sortDescriptorWithKey:NSStringFromSelector(@selector(school)) 
                       ascending:YES]; 

[fetchRequest setSortDescriptors:@[sortDescriptorForSchool, sortDescriptorForSchoolName]]; 

[fetchRequest setFetchBatchSize:4]; 

NSManagedObjectContext *mainContext = [[coreDataManager sharedManager] managedObjectContext]; 

NSFetchedResultsController *FRC = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest 
                         managedObjectContext:mainContext 
                         sectionNameKeyPath:nil 
                            cacheName:nil]; 

[FRC setDelegate: self]; 

NSError *fetchError = nil; 

if (![FRC performFetch: &fetchError]) 
    NSLog(@"fetch error: %@", fetchError); 

[self setStudentDetailFetchedResultsController: FRC]; 

Format Exemple DB:

  1. école et étudiants sont le nom de l'entité.
  2. Relation scolaire avec l'élève un à plusieurs.
  3. Total 4 écoles. Chaque école a 4 élèves.
  4. Maintenant, je veux afficher toute la liste des étudiants avec le nom tri croissant.

Dans UITableView Je montre des détails de l'élève. Il y a une option pour trier les élèves sont trier par entité school. Dans ma FRC ont studentDetail. Comment puis-je trier ces détails avec FRC?

De studentDetail entité ont une relation à un avec school.

Mise à jour

school entity un à plusieurs

school1 
relationship 
    ->student1 
    ->student2 
    ->student3 
    ->student4 
school2 
relationship 
    ->student5 
    ->student6 
    ->student7 
    ->student8 
school3 
relationship 
    ->student9 
    ->student10 
    ->student11 
    ->student12 
school4 
relationship 
    ->student13 
    ->student14 
    ->student15 
    ->student16 

student entity un à un

student1 
relationship 
    ->school1 
student2 
relationship 
    ->school1 
student3 
relationship 
    ->school1 
student4 
relationship 
    ->school1 
student5 
relationship 
    ->school2 
student6 
relationship 
    ->school2 
student7 
relationship 
    ->school2 
student8 
relationship 
    ->school2 
student9 
relationship 
    ->school3 
student10 
relationship 
    ->school3 
student11 
relationship 
    ->school3 
student12 
relationship 
    ->school3 
student13 
relationship 
    ->school4 
student14 
relationship 
    ->school4 
student15 
relationship 
    ->school4 
student16 
relationship 
    ->school4 

enter image description here

Got answer from grâce à @RunLoop. Mais ce besoin de changer peu que je veux.

Comme je l'ai mentionné dans mon code pour trier NSStringFromSelector(@selector(school)) comme, par exemple: [NSSortDescriptor sortDescriptorWithKey[NSString stringWithFormat:@"%K.%K", NSStringFromSelector(@selector(school)), NSStringFromSelector(@selector(schoolName))] ascending:YES] Au lieu de [NSSortDescriptor sortDescriptorWithKey:@"school.schoolName" ascending:YES]

Si j'utilise ce genre de méthode, en fonction si je change un nom dans l'entité, il est avertissement de spectacle et statique school.schoolName ne fait pas. Est-ce possible? J'ai essayé cette méthode avec NSPredicate qui ne montre aucun avertissement. Comment devrais-je résoudre ceci?

+0

Voulez-vous des valeurs DB ou un organigramme DB? – user3589771

+0

@RunLoop Pouvez-vous vérifier maintenant? Question mise à jour Encore si quelque chose me manque, commentez ici. – user3589771

Répondre

0

Le code suivant va chercher les élèves, classés par ordre SchoolName puis par studentName:

NSFetchRequest *fr = [NSFetchRequest fetchRequestWithEntityName:@"Student"]; 
NSSortDescriptor *schoolNameSD = [NSSortDescriptor sortDescriptorWithKey:@"school.schoolName" ascending:YES]; 
NSSortDescriptor *studentNameSD = [NSSortDescriptor sortDescriptorWithKey:@"studentName" ascending:YES]; 
fr.sortDescriptors = @[schoolNameSD, studentNameSD]; 

NSManagedObjectContext *moc = [[coreDataManager sharedManager] managedObjectContext]; 


NSFetchedResultsController *frc = [[NSFetchedResultsController alloc] initWithFetchRequest:fr 
                      managedObjectContext:moc 
                      sectionNameKeyPath:nil 
                        cacheName:nil]; 
[frc performFetch:nil]; 

Si vous voulez seulement trier par studentName, il suffit de retirer le schoolNameSD et demander frc d'effectuer l'opération d'extraction à nouveau.

+0

Merci @RunLoop. Ça a marché!!! En fait j'ai essayé cela avant, à cette époque cette méthode ne fonctionnait pas. Mais je veux utiliser comme ceci 'format NSStringFromSelector (@selector (schoolName))'. J'ai essayé d'utiliser avec 'NSString' et j'ai reçu un avertissement. '[NSString stringWithFormat: @"% K.% K ", NSStringFromSelector (@selector (école)), NSStringFromSelector (@selector (schoolName))]' warning 'Spécificateur de conversion non valide K'. Si j'utilise ce type de méthode, dans la fonction si je change n'importe quel nom dans l'entité c'est l'avertissement et l'école statique.schoolName' n'est pas pourquoi, pouvez-vous aider à résoudre ce problème? – user3589771

+0

Salut, heureux d'avoir pu aider. Veuillez marquer ma réponse comme correcte en cliquant sur le ✓. Vous ne devez pas spécifier la clé de tri en utilisant un sélecteur. Si vous souhaitez effectuer un tri différent, attribuez un nouveau descripteur de tri à la fonction frc et demandez-lui de recourir. – RunLoop

+0

Non, pas un autre genre même. Je vais marquer comme correct mais j'ai encore besoin d'une formation exacte dont j'utilise une autre sorte, aussi je suis post question comme ce format aussi. '[NSSortDescriptor sortDescriptorWithKey [NSString stringWithFormat: @"% K.% K ", NSStringFromSelector (@selector (école)), NSStringFromSelector (@selector (schoolName))] ascendant: YES]' Au lieu de '[NSSortDescriptor sortDescriptorWithKey: @" école .schoolName "ascendant: OUI]' celui-ci donne Waring 'Spécificateur de conversion invalide K'. J'ai essayé de trouver moi-même (avant de poster cette question), mais je n'ai pas pu obtenir ce que je veux. – user3589771