iphone - 从 CoreData 获取特定数量的随机行

标签 iphone xcode core-data predicate fetch

我使用下面的代码来使用与搜索条件匹配的 CoreData 来获取所有行的查询集:itemType = 1。 但我需要做的是从数据中获取特定数量的随机行。 例如,我不需要检索列名 dataType = 1 的所有 100 行数据,而是需要随机获取 dataType = 1 的 25 行。 我希望有一个相对无痛的解决方案。 任何帮助表示赞赏。 lq

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

[request setEntity:[NSEntityDescription entityForName:@"MyAppName" 
                    inManagedObjectContext:[self managedObjectContext]]];

NSError *error = nil;                                           
NSPredicate *predicate;
NSArray *fetchResults;
predicate = [NSPredicate predicateWithFormat:@"(itemType = %i)", 1];            
[request setPredicate:predicate];
fetchResults = [managedObjectContext executeFetchRequest:request error:&error];

if (!fetchResults) {
        // NSLog(@"no fetch results error %@", error);
}

self.mutableArrayName = [NSMutableArray arrayWithArray:fetchResults];
[request release];

最佳答案

您实际上无法获取随机行。合理的随机化策略可能是获取与谓词匹配的所有对象,然后随机选择特定数量的对象。

无论如何,您可以使用NSFetchRequest的以下方法:

- (void)setFetchLimit:(NSUInteger)limit
- (void)setFetchOffset:(NSUInteger)limit

基本上,setFetchLimit 允许您定义要获取的行数(在您的情况下,您将限制设置为 25),而 setFetchOffset 定义要获取的偏移量将开始返回行(有关详细信息,请参阅 fetchOffset 属性的文档)。

这不是一个随机过程,但您可以随机生成偏移量。然而,这里值得注意的是,根据偏移量,您可能会获取一些介于零和获取限制之间的对象。

关于iphone - 从 CoreData 获取特定数量的随机行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3753244/

相关文章:

iphone - 当行重新排序或删除时更新交替颜色的 UITableViewCells

ios - 使用 Core Data 进行排序的 fetchRequest 有哪些限制?

objective-c - 让 App Delegate 执行某个操作?

iphone - 查看我的文档目录的内容

C++ sfml 在窗口打开后立即接收关闭事件

ios - XCode 5.1 强制对 Cocos2d-iphone v3 项目进行 32 位编译

ios - CoreData 在设备上发生错误但在模拟器上正常

iOS-Swift : Serialize a NSManagedObject to JSON (with relationships)

iphone - 在 iOS 上运行无限循环动画

cocoa - NSCollectionView 在按钮单击时获取所选项目