CoreData - 如何创建 fetchrequest 以获取随机属性值数组

Posted

技术标签:

【中文标题】CoreData - 如何创建 fetchrequest 以获取随机属性值数组【英文标题】:CoreData - how to create fetchrequest to get array of random attribute values 【发布时间】:2011-10-02 12:49:59 【问题描述】:

我有 2 个实体 HouseFlat 的简单模型。 HouseFlat 有很多关系。 Flat 具有 numberdescription 等属性。

我想得到一个随机八个平面数字的列表。

我正试着走这条路,但似乎错了

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

    NSEntityDescription *entity = [NSEntityDescription entityForName:@"House" inManagedObjectContext:self.managedObjectContext];

    [fetchRequest setEntity:entity];

    [fetchRequest setFetchBatchSize:20];

    NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:self.managedObjectContext sectionNameKeyPath:nil cacheName:@"Root"];

    NSArray *houses = [aFetchedResultsController fetchedObjects];

那我需要得到合适的值。

请告诉我正确的方法。

我试着回答自己。也许我的大脑是干的:) 只需要

NSEntityDescription *entity = [NSEntityDescription entityForName:@"Flat" inManagedObjectContext:self.managedObjectContext];

然后使用获取的对象数组。但我坚信有更优雅的解决方案。

我还有关于第一个问题的问题。 如果单位数量约为 10000,如何获取随机对象?一般来说,它可以工作,但速度明显减慢。

【问题讨论】:

【参考方案1】:

Limit 对记录进行随机排序并设置[fetchRequest setFetchLimit:8]; 以获得前八名。对于随机排序,请使用随机返回 NSComparisonResult 的选择器或比较器创建 NSSortDescriptor,并将此描述符添加到获取请求中。

【讨论】:

感谢您的回答。但你的意思是 [fetchRequest setFetchLimits:8] 糟糕!是的,我的意思是setFetchLimit:

以上是关于CoreData - 如何创建 fetchrequest 以获取随机属性值数组的主要内容,如果未能解决你的问题,请参考以下文章

在 SwiftUI 中将 @FetchRequest 与 Core Data 一起使用时修改 nil 排序行为

核心数据对象等级(慢)

CoreData - 如何创建 fetchrequest 以获取随机属性值数组

如何在 Coredata 中的相同实体之间创建多个关系?

如何在刚刚创建目标实体模型的 Coredata 中迁移实体

如何解决 AppDelegate 中的 coreData 错误?