带有NSSortDescriptor的NSFetchedResultsController一对一
想要使用NSSortDescriptor
在NSFetchedResultsController
中使用一对一关系的名称进行排序。在这里我的代码带有NSSortDescriptor的NSFetchedResultsController一对一
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];
实例DB格式:
- 学校和学生的实体名称。
- 与学生一对多的学校关系。
- 共有4所学校。每所学校有4名学生。
- 现在我想显示所有学生名单的名称升序排序。
在UITableView
我正在显示学生的详细信息。有一个选项可以按排序school
实体进行排序。在我的FRC有studentDetail
。我怎样才能将这些细节与FRC分类?
从studentDetail
实体与school
有一对一的关系。
更新
school entity
一对多
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
一对一
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
Got answer from感谢@RunLoop。但是这需要一些我想要的改变。
正如我在我的代码提到了排序NSStringFromSelector(@selector(school))
一样,例如:如果我在实体更改任何名称,而不是[NSSortDescriptor sortDescriptorWithKey:@"school.schoolName" ascending:YES]
[NSSortDescriptor sortDescriptorWithKey[NSString stringWithFormat:@"%K.%K", NSStringFromSelector(@selector(school)), NSStringFromSelector(@selector(schoolName))] ascending:YES]
如果我用这种方法,在功能,这是显示警告和静态的school.schoolName
没有。那可能吗? 我试过这个方法,NSPredicate
没有显示任何警告。我应该如何解决这个问题?
下面的代码将获取的学生,通过schoolName下令然后通过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];
如果你只是想通过studentName进行排序,只需删除schoolNameSD并要求FRC再次进行抓取。
感谢@RunLoop。有效!!!其实我之前尝试过,当时这种方法不起作用。但是我想用这个'NSStringFromSelector(@selector(schoolName))'格式。我试着用'NSString'来使用,我得到了警告。 '[NSString stringWithFormat:@“%K.%K”,NSStringFromSelector(@selector(school)),NSStringFromSelector(@selector(schoolName))]'warning'无效的转换说明符K'。如果我使用这种方法,在功能上,如果我在实体中更改任何名称,它会显示警告和静态的“学校”。schoolName'不是这个原因,你能帮助解决这个问题吗? – user3589771
嗨,很高兴我能帮到你。请点击✓标记我的答案为正确的。您不应该使用选择器指定排序键。如果你想执行一个不同的排序,分配一个新的排序描述为FRC,并要求它的度假胜地。 – RunLoop
不,不是另一种相同的。我将标记为正确的,但我仍然需要里面我是用另一种类型的确切的形成,还我喜欢这种格式后问题太多。 '[NSSortDescriptor sortDescriptorWithKey [NSString的stringWithFormat:@ “%K.%K”,NSStringFromSelector(@selector(学校)),NSStringFromSelector(@selector(schoolName))]升序:YES]'代替[NSSortDescriptor sortDescriptorWithKey的':@“校.schoolName”升序:YES]'这一个给韦林氏'无效转换说明K'。我试图找出自己(在发布这个问题之前),但我无法得到我想要的。 – user3589771
你想要DB值还是DB流程图? – user3589771
@RunLoop你现在可以检查吗?更新的问题。如果我错过了这里的任何评论。 – user3589771