从 Core Data 中获取随机对象

Posted

技术标签:

【中文标题】从 Core Data 中获取随机对象【英文标题】:Fetch random objects from Core Data 【发布时间】:2014-07-23 08:48:29 【问题描述】:

我需要从核心数据文件中获取随机对象,比如 10 个随机对象。

我该怎么做?

这是我的NSFetchRequest 设置

- (NSFetchRequest *)fetchRandom

if (!_fetchRandom) 
    _fetchRandom = [[NSFetchRequest alloc] init];

[_fetchRandom setEntity:[NSEntityDescription entityForName:@"Contacts" inManagedObjectContext:self.oneManagedObjectContext]];

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"checked = %@", @"0"];
[_fetchRandom setPredicate:predicate];

NSUInteger count = [self.oneManagedObjectContext countForFetchRequest:_fetchRandom error:NULL];


NSUInteger random = (arc4random() % 5) + 3;

[_fetchRandom setFetchLimit:random];

return _fetchRandom;

【问题讨论】:

【参考方案1】:

您没有在这里获取 10 个随机对象。相反,通过将获取限制设置为 random ,您正在获取随机数量的对象。

要实际获取随机对象,您必须更改谓词。

一种方法是为实体分配一个属性,并以某个数字作为其值——比如“sortKey”,在构建数据库时将其唯一地分配给每个对象。

现在获取 10 个随机值并更改您的谓词以在这组 10 个随机值中返回带有 sortKey 的对象。

setFetchLimit 为 10。

【讨论】:

以上是关于从 Core Data 中获取随机对象的主要内容,如果未能解决你的问题,请参考以下文章

从 Core Data 中获取加载数据的具体价值?

Core Data - 批量处理获取结果的属性

哪一个更好?获取 NSArray 并在那里搜索,还是从 Core Data 一次获取一个对象?

Core Data - 通过 URI 获取托管对象

谓词因从 Core Data 获取属性类型为“NSDate”对象的对象而失败

IOS/objective-c/core-data:如何从相关实体获取属性