在使用Core Data作为后备存储的UITableViewController中,需要执行哪些步骤来实现用户定义的排序?
我还需要回应-tableView:moveRowAtIndexPath:fromIndexPath:toIndexPath:还是表视图自动处理的模型重新排序?我可以检查核心数据模型文件中的“有序”复选框,并期望它将更改从表格视图传输到商店,还是要做更多的事情?我必须改变我的fetchedResultsController获取对象的方式(例如,添加一个排序描述符)?
解决方法
您不需要放弃NSFetchedResultsController或NSOrderedSet.如果你坚持使用NSOrderedSet,简单的方法是将一个方法添加到对象NSManagedObject子类中.所以,例如,如果你有一个对象Book与一组有序的章节,你可以添加一个方法到Chapters对象:
- (NSUInteger)indexInBookChapters { NSUInteger index = [self.book.chapters indexOfObject:self]; return index; }
提示:将其添加到类别,以免CoreData自动生成的代码被覆盖.
然后可以在NSFetchedResultsController的排序描述符中使用此方法:
fetchRequest.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"indexInBookChapters" ascending:YES]];