0

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

我试图在点击编辑按钮时显示每个位置的替代品。就像您在联系人应用程序中编辑联系人时会出现额外的联系人详细信息一样。

我有一个 fetchedResultsController 返回由 positionProperty 键入的 alts/位置的父实体以定义部分。(这可能是错误的方法......我是 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创建的,它仍然返回nil。

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

4

1 回答 1

0

也许您没有像预期的那样使用获取的结果控制器。您的 frc 应该获取所有数据以填充表格视图。

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

-(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。您的调用或获取索引路径失败,因为您通常没有单独的获取结果控制器。

于 2013-06-04T22:06:51.987 回答