-1

Möchten nach Name sortiert werden, die eins-zu-eins Beziehung unter Verwendung NSSortDescriptor in NSFetchedResultsController haben. Hier ist mein CodeNSFetchedResultsController mit NSSortDescriptor eins zu eins

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]; 

Beispiel DB Format:

  1. Schule und Schüler sind Entitätsname.
  2. Schule Beziehung mit Studenten eins zu viele.
  3. Insgesamt 4 Schule. Jede Schule hat 4 Schüler.
  4. Jetzt möchte ich alle Schülerliste mit Namen aufsteigend sortieren zeigen.

In UITableView zeige ich Studentendaten. Es gibt eine Option zum Sortieren von Studenten nach school Einheit sortieren. In meiner FRC haben studentDetail. Wie kann ich diese Details mit FRC sortieren?

Von studentDetail Einheit haben eins zu eins Beziehung mit school.

aktualisieren

school entity one to many

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 00.59

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 dank @RunLoop. Aber das braucht wenig Veränderung was ich will.

Wie ich in meinem Code dient für NSStringFromSelector(@selector(school)) wie, beispielsweise zu sortieren: [NSSortDescriptor sortDescriptorWithKey[NSString stringWithFormat:@"%K.%K", NSStringFromSelector(@selector(school)), NSStringFromSelector(@selector(schoolName))] ascending:YES] Statt [NSSortDescriptor sortDescriptorWithKey:@"school.schoolName" ascending:YES]

Wenn ich diese Art von Verfahren zu verwenden, in Funktion, wenn ich einen beliebigen Namen in Einheit ändern ist es zeigen Warnung und statische school.schoolName nicht. Ist das möglich? Ich habe diese Methode mit NSPredicate versucht, die keine Warnung anzeigt. Wie soll ich das lösen?

+0

Möchten Sie DB-Werte oder DB-Ablaufdiagramm? – user3589771

+0

@RunLoop Können Sie jetzt überprüfen? Aktualisierte Frage. Trotzdem, wenn ich hier irgendeinen Kommentar verpasse. – user3589771

Antwort

0

Der folgende Code wird den Schüler holen, bestellt von School dann von student:

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]; 

Wenn Sie nur von student sortieren wollen, einfach die schoolNameSD entfernen und FRC bitten, die wieder holen auszuführen.

+0

Danke @RunLoop. Es funktionierte!!! eigentlich habe ich das schon mal probiert, damals funktionierte diese Methode nicht. Aber ich möchte dieses 'NSStringFromSelector (@selector (schoolName))' Format verwenden. Ich habe versucht, mit 'NSString' zu verwenden und bekam eine Warnung. '[NSString StringWithFormat: @"% K.% K ", NSStringFromSelector (@Selector (Schule)), NSStringFromSelector (@Selector (Schulname))]' Warnung 'Ungültiger Konvertierungsspezifizierer K'. Wenn ich diese Art von Methode benutze, wenn ich einen Namen in der Entity ändere, wird eine Warnung und eine statische "Schule" angezeigt.schoolName' nicht deshalb, kannst du helfen, das zu lösen? – user3589771

+0

Hallo, froh, dass ich helfen konnte. Bitte markieren Sie meine Antwort mit einem Klick auf ✓. Sie sollten den Sortierschlüssel nicht mithilfe eines Selektors angeben. Wenn Sie eine andere Sortierung durchführen möchten, weisen Sie der Frc einen neuen Sortierungsdeskriptor zu und bitten Sie um eine Sortierung. – RunLoop

+0

Nein, nicht eine andere Sorte. Ich werde als richtig markieren, aber immer noch brauche ich genaue Formation, die ich eine andere Art verwende, auch ich bin Postfrage wie dieses Format auch. '[NSSortDescriptor sortDescriptorWithKey [NSString StringWithFormat: @"% K.% K ", NSStringFromSelector (@Selector (Schule)), NSStringFromSelector (@Selektor (Schulname))] aufsteigend: YES]' Anstelle von '[NSSortDescriptor sortDescriptorWithKey: @" Schule .schoolName "aufsteigend: YES]" gibt dieser Waring 'Ungültige Konvertierungsspezifizierer K'. Ich habe versucht, mich selbst herauszufinden (vor dem Posten dieser Frage), aber ich konnte nicht bekommen, was ich will. – user3589771