Objective-C 核心数据顺序读取循环

Objective-C Core Data sequential read loop

我需要从前到后循环遍历核心数据数据库,看来我唯一的选择是 1) 通过一次提取将整个数据库加载到数组中,或者 2) 使用键来递增我的逐个对象地通过数据库对象的方式。

我根本没有在文档中的任何地方看到类似 'read next' 的内容。我可以做一些努力,但它看起来很傻。请告诉我我遗漏了一些非常明显的东西。

解决方案代码....

我按照下面其中一位发帖人的要求张贴了一些代码片段:

fetchedObjects = nil;
fetchedObjects = [[NSMutableArray alloc] init];
localxmlBlock = [[NSData alloc] init];

savedFetchOffset = 0;
NSFetchRequest *fetch = [[NSFetchRequest alloc] init];
NSEntityDescription *entityDescription = [NSEntityDescription entityForName:@"Item"  inManagedObjectContext: localFindItDataController.managedObjectContext];
[fetch setEntity:entityDescription];
[fetch setFetchLimit:1];
[fetch setFetchOffset:savedFetchOffset];

NSSortDescriptor *sortDescriptor1 = [[NSSortDescriptor alloc] initWithKey:@"itemAttribute1" ascending:YES];
NSSortDescriptor *sortDescriptor2 = [[NSSortDescriptor alloc] initWithKey:@"itemUniqueID" ascending:YES];
[fetch setSortDescriptors:[NSArray arrayWithObjects:sortDescriptor1, sortDescriptor2, nil]];

nsarrayFetchedObjects = [localFindItDataController.managedObjectContext executeFetchRequest:fetch error:&error];

if ([nsarrayFetchedObjects count] != 0) {


    do {

        do a whole great big bunch of stuff

       savedFetchOffset++;
        [fetch setFetchOffset:savedFetchOffset];
        nsarrayFetchedObjects = [localFindItDataController.managedObjectContext executeFetchRequest:fetch error:&error];

    } while ([nsarrayFetchedObjects count] != 0);}

不是有史以来最伟大的代码,但确实说明了它的工作原理

我认为最接近您要查找的是 fetchOffset,还有 fetchLimit,也许还有 fetchBatchSize。这些在 Apple 文档 here.

中有描述

我应该提一下,一个一个地获取每个对象的效率可能非常低 - 尽管有内存开销,但一次获取更大的 batches/all 可能会更好。