逐步从CoreData获取数据

时间:2016-11-28 09:18:24

标签: ios objective-c core-data fetch

我是初次使用CoreData并希望我的问题可以理解,如果不是,请在下面发表评论,如果需要我会澄清。

我在CoreData中存储了大约3k个地址。通过点击它可以获取大约200 / 3k的物体。我在表格视图中列出了它们(200个对象)。但它加载大约2秒钟,这有点慢。

我在考虑这样一个解决方案:加载10个10个对象。这意味着,只要我加载了10个项目,我就会显示这10个项目,然后再加载10个项目并再显示10个项目等等,直到所有项目都不会显示在表格视图中。

这样用户就不会看到2秒的延迟。相反,他会看到10个第一项,如果他没有快速滚动到底部,他就不会注意到任何“错误”。

我的方法是否正确?如果没有,请提供更好的建议

顺便说一句:核心数据中的字段已编入索引。

不确定它是否会有所帮助,以防万一。这是我获取数据的方式:

- (void)performFetchWithCompletionBlock:(CBFetchControllerCompletionBlock)completionBlock
{
[self.context performBlock:^{
    NSError* error = nil;

    NSArray* results = [self.context executeFetchRequest:self.fetchRequest error:&error];
    if (error == nil)
    {
        NSMutableArray* mutableSections = [NSMutableArray arrayWithCapacity:self.sectionPredicatesArray.count];
        [self.sectionPredicatesArray enumerateObjectsUsingBlock:^(NSPredicate* predicate, NSUInteger idx, BOOL *stop) {
            NSArray* sectionItems = [results filteredArrayUsingPredicate:predicate];
            NSArray* sortedItems = [sectionItems sortedArrayUsingDescriptors:self.sortDescriptors];
            if (sortedItems.count)
            {
                NSString* sectionTitle = [self.delegate sectionTitleForSectionIndex:idx];
                CBSectionInfo* section = [[CBSectionInfo alloc] initWithName:sectionTitle objects:sortedItems];
                [mutableSections addObject:section];
            }
        }];
        self.sections = [mutableSections copy];
    }
    dispatch_async(dispatch_get_main_queue(), ^{
        completionBlock((error == nil), error);
    });
}];
}

然后,完成块调用'reloadData':

- (void)refetchObjectsForQuery:(NSString*)query
{
__weak typeof(self)weakSelf = self;
[self.fetchController performFetchWithCompletionBlock:^(BOOL success, NSError *error) {
    __strong __typeof(weakSelf)strongSelf = weakSelf;
    if (success && [strongSelf.searchBar.text isEqualToString:query])
    {
        [strongSelf.tableView reloadData];
    }
}];
}

如果问题很清楚,如果没有人愿意提供详细信息,请告诉我。感谢

修改: 尝试使用fetchOffest和fetchLimit,但延迟仍然相同。 不确定fetchOffest是否以正确的方式使用。我想我需要使用fetchOffest = 10来获取10然后reloadData然后再获取10个?

EDIT2 : 使用fetchLimit和fetchOffest没有帮助。我设置了offset = 0和limit = 1;请求仍然是相同的~2秒

0 个答案:

没有答案