0

我有以下行来排序和划分我的表格视图。

NSSortDescriptor *sortDescriptorState = [[NSSortDescriptor alloc] initWithKey:@"positionSort" ascending:YES];

以上是一个整数值,通过它们各自的 positionSort 值对我的单元格进行排序。我还有下面的代码来显示部分名称;但是,这些部分仍然按字母顺序显示,而不是按 positionSort 顺序显示。我该如何纠正?

NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:self.managedObjectContext sectionNameKeyPath:@"position" cacheName:@"Master"];

谢谢!

更新:感谢@MartinR,我能够得到答案。

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {

    id <NSFetchedResultsSectionInfo> sectionInfo = [[self.fetchedResultsController sections] objectAtIndex:section];

    // Here I build up one of my Position objects using my unique position passed.
    // I had to cast the object as NSMutableString* to get rid of a warning
    Position * aPosition = [Position positionWithUniquePosition:(NSMutableString *)[[[sectionInfo objects] objectAtIndex: 0] position]
                                         inManagedObjectContext:self.managedObjectContext];

    // Once the above is done then I simply just accessed the attribute from my object
    return aPosition.positionDescription;

}
4

1 回答 1

1

initWithFetchRequest:managedObjectContext:sectionNameKeyPath:cacheName:文档中:

sectionNameKeyPath

...如果此键路径与 fetchRequest 中第一个排序描述符指定的不同,则它们必须生成相同的相对排序。例如, fetchRequest 中的第一个排序描述符可能会指定持久属性的键;sectionNameKeyPath 可能为从持久属性派生的瞬态属性指定一个键。

因此,您不能在排序描述符中使用“positionSort”,在 中使用“position” sectionNameKeyPath,因为排序数字和排序字符串不会生成相同的相对排序。

我将对两者都使用“positionSort”并进行更改tableView:titleForHeaderInSection:,以使其将职位名称作为部分标题而不是职位编号返回。

我自己没有尝试过,但这样的东西应该可以工作:

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section { 
    id <NSFetchedResultsSectionInfo> sectionInfo = [[self.controller sections] objectAtIndex:section];
    return [[[sectionInfo objects] objectAtIndex:0] position];
}
于 2012-08-13T09:06:37.957 回答