相关疑难解决方法(0)

为什么在设置提取批量大小时 NSFetchedResultsController 加载所有行?

NSFetchedResultsController 设置为 5 以获取批量大小。我们注意到它的加载速度很慢,所以我们启用了 SQLDebug。出于某种原因,它一次加载 5 行,但它在初始加载时对所有 100 行执行此操作。加载后,它似乎一次加载 5 行。

在看控制台时,我看到查询运行了 20 次;共有 100 行。我原以为这会在前 5 行中运行 1 次,并且当您滚动时,会加载更多行。我还尝试更改提取大小,它具有相同的行为。

获取结果控制器的设置如下。

- (NSFetchedResultsController*) fetchedResultsController {

    if (_fetchedResultsController != nil) {
        return _fetchedResultsController;
    }

    [NSFetchedResultsController deleteCacheWithName:@"Root"];

    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
    NSEntityDescription *entity = [NSEntityDescription 
                                   entityForName:@"Message" inManagedObjectContext:_context];

    fetchRequest.predicate = [NSPredicate predicateWithFormat:@"conversation = %@", conversation];

    [fetchRequest setEntity:entity];

    NSSortDescriptor *sort = [[NSSortDescriptor alloc] 
                              initWithKey:@"timestamp" ascending:YES];
    [fetchRequest setSortDescriptors:[NSArray arrayWithObject:sort]];

    [fetchRequest setFetchBatchSize:5];

    NSFetchedResultsController *theFetchedResultsController = 
    [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest 
                                        managedObjectContext:_context sectionNameKeyPath:nil 
                                                   cacheName:@"Root"];
    self.fetchedResultsController = theFetchedResultsController; …
Run Code Online (Sandbox Code Playgroud)

iphone core-data objective-c

2
推荐指数
1
解决办法
4483
查看次数

标签 统计

core-data ×1

iphone ×1

objective-c ×1