我正在尝试获取所有类别及其子类别,并将它们全部显示在表格中。我知道如何获取所有类别,但我需要获取所有子类别,并使用获取结果控制器按类别对它们进行排序。有什么建议吗?
问问题
284 次
3 回答
2
您可以创建一个获取的结果控制器,该控制器获取SubCategory实体并根据Category将它们分组为部分:
// Fetch "SubCategory" entities:
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"SubCategory"];
// First sort descriptor for grouping the cells into sections, sorted by category name:
NSSortDescriptor *sort1 = [NSSortDescriptor sortDescriptorWithKey:@"category.name" ascending:YES];
// Second sort descriptor for sorting the cells within each section:
NSSortDescriptor *sort2 = [NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES];
request.sortDescriptors = [NSArray arrayWithObjects:sort1, sort2, nil];
self.fetchedResultsController = [[NSFetchedResultsController alloc]
initWithFetchRequest:request
managedObjectContext:context
sectionNameKeyPath:@"category.name"
cacheName:nil];
[self.fetchedResultsController setDelegate:self];
NSError *error;
BOOL success = [self.fetchedResultsController performFetch:&error];
然后,您可以使用NSFetchedResultsController 类参考中描述的常用表视图数据源方法。
这为您提供了一个表格视图,其中每个类别都有一个表格视图部分。
于 2012-10-21T01:50:05.737 回答
1
因此,您在fetchedResultsController.fetchedObjects中有类别
因为每个子类别基本上都包含在类别中,您可以通过调用访问每个子类别[Category valueForKey:@"subCategory"
这将为您提供一个 NSSet,然后您可以对其进行排序(到 NSArray)并用作 tableView 的数据。
但它不会包含在 fetchedResultsController 中。
于 2012-10-20T23:53:44.707 回答
0
如果您有选择权,您也可以根据需要以其他方式进行操作。
取arrayOfCategories 中的所有Category 对象
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection (NSInteger)section:
{
Category *cat = [ arrayOfCategories objectAtIndex:indexPath.row]
if(arrayToHoldObjects.count > 0)
{
[arrayToHoldObjects removeAllObject];
}
for(Subcategory *sub in Category.subcategory)
{
[arrayToHoldObjects addObject:sub];
}
return arrayToHoldObjects.count;
}
- (UITableViewCell *)tableView:(UITableView *)tableView
cellForRowAtIndexPath:(NSIndexPath *)indexPath {
Category *cat = [ arrayOfCategories objectAtIndex:indexPath.row]
if(arrayToHoldObjects.count > 0)
{
[arrayToHoldObjects removeAllObject];
}
for(Subcategory *sub in Category.subcategory)
{
[arrayToHoldObjects addObject:sub];
}
Subcategory *sub = [arrayToHoldObjects objectAtIndexPath.row]
for(int k =0 ; k < arrayToHoldObjects .count; k++)
{
// do what ever u like with sub
return cell;
}
}
于 2012-10-21T06:01:27.483 回答