我制作了测试应用https://github.com/Aitbaev/iOS2在此应用中有3个ViewControllers
组必须始终为3,每组的10-15个人名称在第一次运行期间从字符串数组中随机抽取,并插入到Core Data存储中。第一次运行后,应用程序填充表仅从coredata加载(不生成组)。问题是第二个tableView上的UITableView仅在首次运行期间以正确的顺序显示行。第一次运行后,
如果用户退回 2)人名为1)组
然后再去 2)人名,
人名相同但顺序不同,并且在首次运行后发生。在第一次运行期间,一切都很好。
答案 0 :(得分:0)
您对['studentsInGroup' allObjects]
中NamesViewController.m
的调用并不保证对象将以相同的顺序返回,因为NSSet
是无序的对象集合。
要对与Group
对象相关联的学生进行排序,从而在每次出现该视图时保证相同的顺序,您可以在您的学生组中拨打以下内容:
NSSortDescriptor *sort = [NSSortDescriptor sortDescriptorWithKey:@"studentsNames" ascending:YES];
NSArray *sortedArray = [studentsInGroup sortedArrayUsingDescriptors:[NSArray arrayWithObject:sort]];
所以我认为它会放在你的getStudentsForRowMethod:
中,所以最终的代码看起来像这样:
-(Students*)getStudentForRow:(NSInteger)row{
NSArray* arrayOfStudents = [self.group.studentsInGroup allObjects];
NSSortDescriptor *sort = [NSSortDescriptor sortDescriptorWithKey:@"studentsNames" ascending:YES];
NSArray *sortedArray = [arrayOfStudents sortedArrayUsingDescriptors:[NSArray arrayWithObject:sort]];
return [arrayOfStudents objectAtIndex:row];
}
此外,您可能希望在viewDidLoad
或覆盖group
属性的getter中执行排序,因此每次需要访问有序的学生集时都不会执行排序。