如何在子视图中选择“子”实体?

时间:2010-05-06 21:19:15

标签: iphone core-data

我正在尝试管理深入的数据列表。我有一个实体,联系人,与另一个实体,规则有很多关系。在我的根视图控制器中,我使用获取的结果控制器来管理和显示联系人列表。当点击一个联系人时,我将一个新的视图控制器推入堆栈,其中包含一个联系人规则列表。

我无法弄清楚如何使用第二个获取的结果控制器来显示规则,所以我使用以下内容:

// create a set of the contact's rules
rules = [NSMutableSet set];
rules = [self.contact mutableSetValueForKey:@"rule"];

// create an array of rules from the set
arrayOfRules = [NSMutableArray arrayWithCapacity:[rules count]];
for (id oneObject in rules)
     [arrayOfRules addObject:oneObject];

// sort the array of rules
NSSortDescriptor *descriptor = [[NSSortDescriptor alloc] initWithKey:@"phoneLabel" ascending:YES];
[arrayOfRules sortUsingDescriptors:[NSArray arrayWithObject:descriptor]];
[descriptor release];

我创建了一组规则,然后使用它来创建一个规则数组以进行排序。然后,我使用这两个集合来填充分组表视图。所有这些似乎都正常工作。

以下是我的问题:用户可以在此视图中执行多种不同的操作,其中大多数都要求我知道已触发的规则。但我无法弄清楚如何做到这一点。例如,假设用户想要删除规则。在我看来,正确的方法是...... ...

[rules removeObject:ruleObjectToBeRemoved]

...但我无法弄清楚如何指定ruleObjectToBeRemoved。我希望所有这些都是有道理的。

像往常一样,提前感谢您提供的任何建议。

1 个答案:

答案 0 :(得分:0)

我假设您以某种方式保留对arrayOfRules的引用。如果是这样,当用户点击单元格方法时

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
应该调用tableViewDelegate的

。如果是这样,您可以使用indexPath获取相应的Rule对象,就像这样

Rule* yourRule = [arrayOfRules objectAtIndex:indexPath.row];

当然,如果你有多个部分,你需要获取与被点击的单元格相对应的数组(为此使用indexPath.section)。

实现您希望实现的目标的更简单方法是:

[arrayOfRules removeObjectAtIndex:indexPath.row];

希望这有帮助, 保罗