1

すべてのカテゴリとそのサブカテゴリを取得して、すべてをテーブルに表示しようとしています。すべてのカテゴリをフェッチする方法は知っていますが、すべてのサブカテゴリをフェッチし、フェッチ結果コントローラーを使用してカテゴリ別に並べ替える必要があります。提案のアイデアはありますか?

ここに画像の説明を入力してください

4

3 に答える 3

2

SubCategoryエンティティをフェッチし、それらをカテゴリに従ってセクションにグループ化するフェッチ済み結果コントローラを作成できます。

// 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クラスリファレンスで説明されているように、通常のテーブルビューデータソースメソッドを使用できます。

これにより、カテゴリごとに1つのテーブルビューセクションを持つテーブルビューが提供されます。

于 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 に答える