ios - NSSortDescriptor 在查看详细 View 并返回后按字母顺序重新排序单元格

标签 ios objective-c core-data uitableview nsfetchedresultscontroller

我有一个或多或少基本的主详细信息应用程序。我关注了this tutorial熟悉核心数据,现在我正在尝试在我的主 TVC 上重新排序我的单元格。一切工作正常,包括我的单元格的成功重新排序。然而,当我深入挖掘并查看其中一个详细的 VC 时,我又回到原来的按字母顺序排列的顺序。我相信它与教程中包含的 NSSortDescriptorsortDescriptor”有关。我不知道如何删除它,或者如何赋予它不同的特性。任何帮助表示赞赏。下面是我的 NSFetchedResultsController 方法。

-(NSFetchedResultsController*) fetchedResultsController {

    if (_fetchedResultsController != nil) {
        return _fetchedResultsController;
    }

    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];

    NSManagedObjectContext *context = [self managedObjectContext];

    NSEntityDescription *entity = [NSEntityDescription entityForName:@"Top" inManagedObjectContext:context];

    [fetchRequest setEntity:entity];

    NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"topName" ascending:YES];

    NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];

    fetchRequest.sortDescriptors = sortDescriptors;

    _fetchedResultsController = [[NSFetchedResultsController alloc]initWithFetchRequest:fetchRequest managedObjectContext:context sectionNameKeyPath:nil cacheName:nil];

    _fetchedResultsController.delegate = self;

    return _fetchedResultsController;
}

编辑: 经过过去几天的大量研究,我意识到这更多是我的 moveRowAtIndexPath 方法的问题。有人对使用核心数据和重新排序单元格的能力有任何建议或建议吗?另外,这是否需要自定义 tableviewcell 类?

最佳答案

您的表格 View 是根据名称排序的。鉴于名称是固定的,如果您“手动”对单元格重新排序,然后返回 TableView ,则会重新建立基于名称的排序。

要获得您想要的结果,您需要向核心数据模型添加一个名为 sortIndex 的字段。然后,您可以使用基于 sortIndexsortDescriptor 对表进行排序;您可以将 sortIndex 初始化为创建顺序。当用户通过 UI 对单元格重新排序时,您还将更改所有受影响的单元格/托管对象的 sortIndex。然后,由于 sortIndex 是核心数据模型的一部分,因此当用户结束并重新启动您的应用程序时,将重新建立他们的首选排序。

有时,出于建模原因,您不希望直接在某些托管对象中包含 sortIndex。例如,Person 有名字和姓氏,但没有 sortIndex(事实上)。您可以创建一个关联,可能是一个 DisplayPreferences 托管对象,它在 PersonDisplayPreferences 之间进行一对一映射,并具有DisplayPreferences 中的 sortIndex

关于ios - NSSortDescriptor 在查看详细 View 并返回后按字母顺序重新排序单元格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23460244/

相关文章:

ios - iPhone 6+ 的限制

ios - DTCoreText 图像不显示

objective-c - 如何使用 Objective C 解析这个 XML 文件?

ios - Apple 希望我们如何设置表格 View 单元格?

ios - 如何将新对象插入到实体中并设置该对象与另一个实体的现有对象的关系?

ios - 在设备上运行时应用程序功能发生变化

ios - 如何检测从 html 字符串创建的 NSAttributedString 中的 anchor 标记链接单击

objective-c - 核心数据和自反实体关系(一对一或一对多)

ios - UITableView UI 不会从新的 NSFetchedResultsController 刷新数据

ios - 核心数据谓词不匹配 bool 属性