插入新实体时,NSFetchResultsController 排序不起作用

Posted

技术标签:

【中文标题】插入新实体时,NSFetchResultsController 排序不起作用【英文标题】:NSFetchResultsController sorting is not working when inserting new entity 【发布时间】:2014-05-12 05:04:11 【问题描述】:

我有一个名为“MyPhoto”的 CoreData 实体,它具有以下属性:- photoData、timeStamp、folderName。将 photoData 保存到核心数据时将今天的 Date 和 TimeStamp 属性设置为 timeStamp 属性。我想要带有文件夹名称的部分,并且在我想要使用时间戳对照片进行排序的部分内。我正在使用 NSFetchResultsController 来获取数据并使用 UICollectionView 来显示它。

问题是:当我尝试插入新照片时,它没有按正确的排序顺序插入,但是当我重新启动应用程序时,它会以正确的排序顺序显示所有照片。

这是我正在使用的代码:

- (NSFetchedResultsController *)fetchedResultsController

    if (_fetchedResultsController != nil)
    
        return _fetchedResultsController;
    

    /*
     Set up the fetched results controller.
     */
    // Create the fetch request for the entity.
    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];

    NSManagedObjectContext *moc = [[CoreDataManager sharedInstance] managedObjectContext];
    // Edit the entity name as appropriate.
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"MyPhoto" inManagedObjectContext:moc];
    [fetchRequest setEntity:entity];

    // Set the batch size to a suitable number.
    [fetchRequest setFetchBatchSize:20];

    // Sort using the timeStamp property.
    NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"folderName" ascending:YES];
    NSSortDescriptor *sortDescriptor1 = [[NSSortDescriptor alloc] initWithKey:@"timeStamp" ascending:NO];
    [fetchRequest setSortDescriptors:@[sortDescriptor, sortDescriptor1]];

    // Use the folderName property to group into sections.
    _fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:moc sectionNameKeyPath:@"folderName" cacheName:@"Root"];
    _fetchedResultsController.delegate = self;

    return _fetchedResultsController;

    

我希望我已经清楚地解释了我的问题。提前感谢您的帮助。

【问题讨论】:

【参考方案1】:

我看到你正在设置委托。您是否实际实现了任何委托方法?

对于初学者,您可以在controllerDidChangeContent: 中致电reloadData

【讨论】:

以上是关于插入新实体时,NSFetchResultsController 排序不起作用的主要内容,如果未能解决你的问题,请参考以下文章

cakephp3 如何检查实体是不是是新插入的 afterSave 回调?

插入新实体而不创建子实体(如果存在)

如何在 Swift 中向实体插入新数据?

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

自定义核心数据映射:在现有关系之间插入新实体

向关系中插入新数据时如何更新tableView