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