【发布时间】:2013-08-24 01:47:08
【问题描述】:
我有一个实体在一个部分的表格视图中显示。该实体有两个属性,workoutName 和 trainingLevel。两者都是字符串类型。培训级别由 3 种类型组成:1、2、3。(trainingLevel =(整数 16 或字符串类型?哪个更理想?)我想将表格分成三个部分,每个部分包含相应培训级别的条目.
我该怎么做?我目前使用的代码如下:
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
// Return the number of sections.
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
// Return the number of rows in the section.
return self.workoutType.workouts.count;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell =
[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil)
{
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle
reuseIdentifier:CellIdentifier];
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
}
WorkoutSet *workoutSet = [self.fetchedResultsController objectAtIndexPath:indexPath];
cell.textLabel.text = workoutSet.workoutName;
cell.detailTextLabel.text = [NSString stringWithFormat:@"(%d)", workoutSet.days.count];
}
-(void)fetchWorkoutSets
{
NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"WorkoutSet"];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"workoutType = %@", self.workoutType];
NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"workoutName" ascending:YES];
[fetchRequest setSortDescriptors:@[sortDescriptor]];
[fetchRequest setPredicate:predicate];
self.fetchedResultsController = [[NSFetchedResultsController alloc]
initWithFetchRequest:fetchRequest managedObjectContext:self.managedObjectContext
sectionNameKeyPath:nil cacheName:nil];
NSError *error;
if (![self.fetchedResultsController performFetch:&error])
{
NSLog(@"Fetch failed: %@", error);
}
}
我正在努力解决的是:
- 如何通过核心数据模型通过获取训练级别为 1 或 2 或 3 的条目数来确定每个部分的行数。
- 如何通过获取正确的项目来填充每个部分的行。
- 如何为每个部分标题指定标题。
【问题讨论】:
-
你已经差不多了。只需检查
NSFetchedResultsController的文档,特别是指定初始化程序的sectionNameKeyPath参数,您希望将其设置为trainingLevel属性。 -
另请注意,您的
fetchedResultsControllergetter 应该执行获取,而不是fetchWorkoutSet,否则如果您需要确保已获取锻炼集并且您需要 fetchedResults,您将有两个不同的调用.
标签: ios core-data tableview nsfetchedresultscontroller