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

时间:2015-12-26 01:50:41

标签: objective-c core-data sequential

我需要从前到后循环遍历核心数据数据库,似乎我唯一的选择是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);}

不是有史以来编写的最好的代码,但它确实能说明这似乎有用吗

1 个答案:

答案 0 :(得分:2)

我认为最接近您所寻找的是fetchOffset,以及fetchLimitfetchBatchSize。 Apple Docs here中描述了这些内容。

我应该提一下,逐个获取每个对象的效率可能非常低 - 尽管存在内存开销,但是以较大批量/一次性获取可能会更好。