我需要从前到后循环遍历核心数据数据库,似乎我唯一的选择是1)将整个数据库加载到一个带有单个提取的数组中,或者2)使用键来增加我的方式按对象的数据库对象。
我根本没有在文档中的任何地方看到“读下一个”的内容。我可以用一些努力来做#2但看起来很傻。请告诉我,我错过了一些希望非常明显的东西。
解决方案代码......
我按照下面一张海报的要求提出了一些代码片段:
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);}
不是有史以来编写的最好的代码,但它确实能说明这似乎有用吗
答案 0 :(得分:2)
我认为最接近您所寻找的是fetchOffset
,以及fetchLimit
和fetchBatchSize
。 Apple Docs here中描述了这些内容。
我应该提一下,逐个获取每个对象的效率可能非常低 - 尽管存在内存开销,但是以较大批量/一次性获取可能会更好。