NSFetchedResultsController创建太多部分

眼球

我复制从苹果的代码文件NSFetchedResultsController它说,sectionNameKeyPath如果我想为显示结果的UITableView划分我的结果,则应提供。

我旨在根据模型对象名称开头的字符来区分结果。即按名称排序。

这段代码完全可以做到这一点(按名称排序),但是每一行都显示在自己的部分中,而不是对行组进行分区。(节数基本上等于行数)。

我相信我在某个地方犯了一个愚蠢的错误,但是现在我花了两个半小时,看不到任何东西。我只是要粘贴要在其中显示数据的UITableView的委托/数据源方法。

#pragma mark NSFetchedResultsController
- (NSFetchedResultsController *)fetchedResultsController {
    if (_fetchedResultsController != nil) {
        return _fetchedResultsController;
    }

    NSFetchRequest *fetchRequest = [Place MR_requestAllSortedBy:@"name" ascending:YES];
    [fetchRequest setFetchLimit:0];
    [fetchRequest setFetchBatchSize:20];

    NSFetchedResultsController *theFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:[NSManagedObjectContext MR_contextForCurrentThread] sectionNameKeyPath:@"name" cacheName:@"places"];
    _fetchedResultsController = theFetchedResultsController;
    _fetchedResultsController.delegate = self;
    return _fetchedResultsController;
}


#pragma mark UITableViewDelegate
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    ListTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:listTableViewCellIdentifier];

    Place *place = [_fetchedResultsController objectAtIndexPath:indexPath];

    FAKIcon *categoryIcon = [FFPlaceHandler getIconForPlaceWithCategoryID:place.main_category andSize:CELL_ICON_SIZE];
    [categoryIcon addAttribute:NSForegroundColorAttributeName value:FF_WHITE_COLOR];

    FAKIcon *circleIcon = [FAKFontAwesome circleIconWithSize:CELL_ICON_CIRCLE_SIZE];
    [circleIcon addAttribute:NSForegroundColorAttributeName value:[FFPlaceHandler getColorForPlaceWithCategoryID:place.main_category]];

    cell.image.image = [UIImage imageWithStackedIcons:@[circleIcon, categoryIcon] imageSize:CGSizeMake(CELL_ICON_CIRCLE_SIZE, CELL_ICON_CIRCLE_SIZE)];

    cell.title.text = place.name;
    cell.addressLabel.text = place.place_contact_info.address;

    [cell setDistanceWithDistance:[place.distance_from_user floatValue]];

    cell.indexPath = indexPath;
    cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;

    return cell;
}

#pragma mark UITableViewDatasource

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {
    if ([[_fetchedResultsController sections] count] > 1) {
        id <NSFetchedResultsSectionInfo> sectionInfo = [[_fetchedResultsController sections] objectAtIndex:section];
        return [sectionInfo name];
    } else
        return nil;
}

- (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView {
    return [_fetchedResultsController sectionIndexTitles];
}

- (NSInteger)tableView:(UITableView *)tableView sectionForSectionIndexTitle:(NSString *)title atIndex:(NSInteger)index {
    return [_fetchedResultsController sectionForSectionIndexTitle:title atIndex:index];
}


- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
    return 40.0;
}

- (NSInteger)tableView:(UITableView *)table numberOfRowsInSection:(NSInteger)section {
    if ([[_fetchedResultsController sections] count] > 1) {
        id <NSFetchedResultsSectionInfo> sectionInfo = [[_fetchedResultsController sections] objectAtIndex:section];
        return [sectionInfo numberOfObjects] ;
    } else
        return 0;
}

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return [[_fetchedResultsController sections] count];
}

为什么UITableViewCell分配给的每个部分都没有按字母顺序排列?

编辑:

通过在核心数据中的放置表中添加字段来解决该问题。该字段保存每个记录的第一个字符。在此之后,我更改了sectionKeyPath在此方法中看到的内容:

#pragma mark NSFetchedResultsController
- (NSFetchedResultsController *)fetchedResultsController {
    if (_fetchedResultsController != nil) {
        return _fetchedResultsController;
    }

    NSFetchRequest *fetchRequest = [Place MR_requestAllSortedBy:@"name" ascending:YES];
    [fetchRequest setFetchLimit:0];
    [fetchRequest setFetchBatchSize:20];

    NSFetchedResultsController *theFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:[NSManagedObjectContext MR_contextForCurrentThread] sectionNameKeyPath:@"name_first_character" cacheName:@"places"];
    _fetchedResultsController = theFetchedResultsController;
    _fetchedResultsController.delegate = self;
    return _fetchedResultsController;
}

此外i取代了> 1> 0所建议MOBY我现在有一些不错的部分:)

雪人

按keypath进行的分区name将为每个具有不同名称值的模型创建一个新的分区因此,如果您有20个模型并且它们都具有不同的name值,则将有20个部分。如果您有20个模型,其中10个模型具有name A,其中10个模型具有name B,则将有2个部分。

另外,在您的

 - (NSInteger)tableView:(UITableView *)table numberOfRowsInSection:(NSInteger)section {

您正在检查

if ([[_fetchedResultsController sections] count] > 1) 

相反,我认为您应该在检查count > 0而不是1。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用JavaMail创建多部分

来自分类Dev

使用JavaMail创建多部分

来自分类Dev

NSFetchedResultsController已创建,但部分为零

来自分类Dev

NSFetchedResultsController已创建,但部分为零

来自分类Dev

Python 中的复杂 POST 请求 -- 多部分文件 -- 解包的值太多

来自分类Dev

如何创建多部分电子邮件?[路轨]

来自分类Dev

在单元测试中创建多部分/混合形式请求

来自分类Dev

创建多部分归档文件以适合Solaris 5.8上的软盘

来自分类Dev

如何在Linux中创建多部分rar文件?

来自分类Dev

创建多部分电子邮件并在Linux中发送

来自分类Dev

构建多部分响应

来自分类Dev

分块的多部分问题

来自分类Dev

Retrofit 2.0多部分

来自分类Dev

Alamofire的多部分POST

来自分类Dev

AngularJS的多部分请求

来自分类Dev

Alamofire的多部分POST

来自分类Dev

多部分请求

来自分类Dev

多部分请求

来自分类Dev

RegExp 多部分短语

来自分类Dev

NSFetchedResultsController:重新排序部分

来自分类Dev

如何使用ASP.NET Core创建多部分HTTP响应

来自分类Dev

使用Ionic创建大型多部分zip会失败,并显示OutOfMemoryException

来自分类Dev

SQL触发器创建无法绑定多部分标识符“ ALIAS”

来自分类Dev

尝试在插入时创建触发器时出现多部分标识符错误

来自分类Dev

如何在Linux中创建多部分7zip文件?

来自分类Dev

如何使用Java在请求正文中使用xml创建多部分/混合请求?

来自分类Dev

当应用蒙版时,路径的太多部分被切断时,如何修复 SVG 路径蒙版问题

来自分类Dev

动态创建NSFetchedResultsController

来自分类Dev

AFNetworking 3.0多部分请求