使用NSSet关系填充cellForRow

时间:2011-04-09 02:36:00

标签: ios uitableview core-data nsset

我查看过很多帖子,但仍不确定如何解决这个问题。希望有人可以提供帮助。

直到命中最后一个数据源方法cellForRow。 那时我可以为每个部分获得正确的NSSet,但是无序。关系属性的intropection如何适用于行?

在cellForRow中使用字符串文字我确实在每个部分中获得了正确的行数,但显然没有与那里的托管对象的连接。

如何填充NSSet关系中的行?所有见解赞赏

类别<< --->>人
cName ---------- pName

关系
人----------类别

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return [[self.fetchedResultsController fetchedObjects] count];
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section     {
Category* cat = [[self.fetchedResultsController fetchedObjects] objectAtIndex:section];
return [[cat people] count];
}

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {
Category* cat = [[self.fetchedResultsController fetchedObjects] objectAtIndex:section];
NSNumber *rowCount = [NSNumber numberWithUnsignedInteger:[[cat people] count]]; 
return cat.cName;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {    
NSManagedObject *mo = [[fetchedResultsController fetchedObjects] objectAtIndex:index.row]];

// returns the correct set but unordered, possibly work with this to populate the rows?
//NSSet *theSet = [[NSSet alloc] initWithSet: [mo valueForKeyPath:@"people.pName"]];

// doesn't work
// cell.textLabel.text = [NSString stringWithFormat:@"%@",[mo valueForKeyPath:@"people.pName"]];

cell.textLabel.text = @"something";
return cell;
}

1 个答案:

答案 0 :(得分:0)

您的问题是您正在获取Category个对象,但您尝试使用Person个对象设置行。 Person对象是无序的,因为它们不是获取的对象。它们与tableview的逻辑结构无关。实际上,它们不能,因为它们与Category具有多对多的关系,因此同一个Person对象可以在同一个表中多次显示。

最好的解决方案是将其分解为两个分层表。一个显示“类别”列表,第二个显示{1}}对象,在{1}}对象中选择第一个表格视图中的Person对象。

您可以通过尝试以下方式尝试使用当前设计:

people

如果您的数据是静态的,这将有效。如果在表格显示时它发生变化,您将遇到麻烦。它会产生一些开销,因为每次填充行时都必须获取Category对象的所有- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { Category *sectionCategory=[[fetchedResultsController fetchedObjects] objectAtIndex:indexPath.section]; NSSortDescriptor *sort=[NSSortDescriptor sortWithKey:@"pname" ascending:NO]; NSArray *sortedPersons=[sectionCategory.people sortedArrayUsingDescriptors:[NSArray arrayWithObject:sort]]; Person *rowPerson=[sortedPersons objectAtIndex:indexPath.row]; cell.textLabel.text = rowPerson.pname; 对象并对其进行排序。

我强烈推荐两种tableview解决方案。这是分层数据的首选解决方案。