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++:应用程序请求运行时以异常方式终止