我有一個實體顯示在一個表格視圖中只有一個部分。該實體有兩個屬性,workoutName
和trainingLevel
。兩者都是字符串類型。訓練級別由3種類型組成:1,2,3(trainingLevel =(整數16或字符串類型?哪種理想?)我想將表格分成三部分,每部分包含相應訓練級別的條目?iOS的UITableView部分與fetchedResultsController混淆
如何做到這一點我目前正在使用的代碼如下:
- (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」的文檔,特別是您想要設置爲「trainingLevel」屬性的指定初始化程序的「sectionNameKeyPath」參數。 – Rog
另請注意,您的'fetchedResultsController' getter應該執行提取操作,而不是'fetchWorkoutSet',否則如果您需要確保已經提取了鍛鍊集並且您需要fetchedResults,則會有兩個不同的調用。 – memmons