获取FetchedResultsController中对象的indexPath

时间:2013-06-04 20:06:09

标签: core-data

我正在为管理团队位置分配的应用创建一个表格视图控制器。例如,如果具有该positionProperty的位置Entity,那么带有防御,中心和攻击标题的部分将在其中包含名称。如果通过滑动删除了该人,则他们将成为具有相同positionProperty的替代实体。

点击编辑按钮时,我试图为每个位置显示替换。与在联系人应用程序中编辑联系人时显示额外的联系人详细信息非常相似。

我有一个fetchedResultsController返回由positionProperty键入的alts / position的父实体来定义节。 (这可能是错误的方法......我是Core Data的新手。)

在setEditing中:WithAnimation我做了以下操作。尝试搜索我获取的结果,如果任何对象的类型为Alternate,则显示该行。所以在枚举中,如果它是类型alternate,我试着调用IndexPathForObjects:alt。这刚刚回来了......

    if(editing){

        [self.tableView beginUpdates];

        for (MCAlternate *alt in fetchedResultsController.fetchedObjects) {
            if ([alt isKindOfClass:[MCAlternate class]]) {
                NSLog(@"The alternate is: %@", alt);

                // This is where the error is trying to get indexPathForObject
                NSIndexPath *index = [fetchedResultsController indexPathForObject:alt];
               [self.tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:[index] withRowAnimation:UITableViewRowAnimationLeft];
            }
        }
        [self.tableView endUpdates];
    }

我已检查结果中是否存在对象。确实如此。我也尝试在一个地方调用getindexpath,只是通过调用objectAtIndexPath创建了对象,它仍然没有回来。

任何建议表示赞赏,谢谢!

1 个答案:

答案 0 :(得分:0)

也许你没有使用你所获取的结果控制器,因为它是预见到的。您的frc应该获取所有数据以填充表视图。

您仍然可以通过调整表格视图datasource方法来实现动态表格内容。假设您正在获取实体“位置”,并且所讨论的位置对象具有实体“MCAlternate”的多对属性,称为“替换”。然后,您将按如下方式扩展某个部分:

-(void)expandSectionForPosition:(Position *)position {
    int row = 0;
    int section = [[frc indexPathForObject:position] section];
    for (MCAlternate *alt in position.alternates) {
         // update your datasource - e.g. by marking the position as 
         // "expanded"; make sure your numberOfRowsInSection reflects that

         [_tableView insertRowsAtIndexPaths:@[[NSIndexPath 
           indexPathForRow:i++ inSection:section]] 
           withRowAnimation:UITableViewRowAnimationLeft];
    }
}

您的班级检查不合逻辑 - 您仍然在for循环中转换为MCAlternate。您的呼叫或获取索引路径失败,因为您通常没有单独的提取结果控制器。