UITableView 仅在第一次运行时以正确的顺序显示行

Posted

技术标签:

【中文标题】UITableView 仅在第一次运行时以正确的顺序显示行【英文标题】:UITableView shows rows in right order only during first run 【发布时间】:2016-09-04 14:51:36 【问题描述】:

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

    人群(UITableView) 人名(UITableView) 人物详细信息(随便)

组必须始终为 3 个,每个组的 10-15 人姓名在第一次运行期间从字符串数组中随机抽取,并插入到 Core Data 存储中。第一次运行后,应用程序填充表仅从 coredata 加载(不生成组)。问题是第二个 tableView 上的 。第一次运行后,

如果用户从 2)人名到1)组

然后再次转到 2)人名,

人物名称相同但顺序不同,并且在第一次运行后发生。在第一次运行期间,一切正常。

【问题讨论】:

您可以在人名表视图中显示之前按字母顺序对人名数组进行排序。 【参考方案1】:

您在NamesViewController.m 中对['studentsInGroup' allObjects] 的调用不能保证对象将以相同的顺序返回,因为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 中执行排序,因此不会在您每次需要访问有序的学生集合时执行排序。

【讨论】:

以上是关于UITableView 仅在第一次运行时以正确的顺序显示行的主要内容,如果未能解决你的问题,请参考以下文章

在 UITableView 重新加载时以编程方式打开/关闭 UITextField 的 inputView

为啥我的 iOS 应用程序仅在首次运行时正确检测到当前语言?

OpenCV、Python 和 C++:应用程序请求运行时以异常方式终止

npm run watch/hot 仅在第一次运行时成功

仅在非交互式运行时如何从 Powershell 脚本返回退出代码

关闭另一个视图后 UITableView 滚动内容大小不正确