1

我正在尝试获取所有类别及其子类别,并将它们全部显示在表格中。我知道如何获取所有类别,但我需要获取所有子类别,并使用获取结果控制器按类别对它们进行排序。有什么建议吗?

在此处输入图像描述

4

3 回答 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 回答