插入新实体时,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 回调?