UITableView仅在首次运行期间以正确的顺序显示行

时间:2016-09-04 14:51:36

标签: ios objective-c uitableview core-data

我制作了测试应用https://github.com/Aitbaev/iOS2在此应用中有3个ViewControllers

  1. 一群人(UITableView)
  2. 人名(UITableView)
  3. 人物详情(无论如何)
  4. 组必须始终为3,每组的10-15个人名称在第一次运行期间从字符串数组中随机抽取,并插入到Core Data存储中。第一次运行后,应用程序填充表仅从coredata加载(不生成组)。问题是第二个tableView上的UITableView仅在首次运行期间以正确的顺序显示行。第一次运行后,

    如果用户退回 2)人名为1)组

    然后再去 2)人名,

    人名相同但顺序不同,并且在首次运行后发生。在第一次运行期间,一切都很好。

1 个答案:

答案 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中执行排序,因此每次需要访问有序的学生集时都不会执行排序。