這裏是我的數據模型: Datamodel http://s1.directupload.net/images/131007/ud8fqkra.png核心 - 數據NSFetchedResultsController一對多關係
我充滿了數據庫中的數據。
現在我想在tableview中顯示它。 首先,我想選擇'天'屬性的一天,然後得到它的教訓。 我想在標題中顯示屬性「結束」和「開始」(-(NSString *) tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
)
然後我想在右側部分顯示課程數據。我怎樣才能做到這一點與NSFetchedResultsController?
我已經建立了一個基本的代碼:
NSFetchRequest* fetch = [NSFetchRequest fetchRequestWithEntityName:NSStringFromClass([Lessons class])];
NSSortDescriptor* sortGroup = [NSSortDescriptor sortDescriptorWithKey:@"lesson" ascending:YES];
fetch.sortDescriptors = @[sortGroup];
NSFetchedResultsController *controller = [[NSFetchedResultsController alloc] initWithFetchRequest:fetch managedObjectContext:self.managedObjectContext sectionNameKeyPath:nil cacheName:nil];
NSError* error;
[controller performFetch:&error];
if (error) {
NSLog(@"Error: %@", error);
abort();
}
編輯:
這裏是故事板:
UPDATE
這裏是我的代碼:
TableView.m(重要的方法)
-(id)init
{
self = [super init];
if (self) {
NSLog(@"%s",__PRETTY_FUNCTION__);
self.del = [[UIApplication sharedApplication] delegate];
self.managedObjectContext = self.del.managedObjectContext;
NSFetchRequest* fetch = [NSFetchRequest fetchRequestWithEntityName:@"Lessons"];
NSString *theSelectedDay = @"Mi";
NSPredicate *pred = [NSPredicate predicateWithFormat:@"lessonToDay.day == %@", theSelectedDay];
fetch.predicate = pred;
NSSortDescriptor *sortTime = [NSSortDescriptor sortDescriptorWithKey:@"lessonToTime.start" ascending:YES];
//NSSortDescriptor *sortGroup = [NSSortDescriptor sortDescriptorWithKey:@"lesson" ascending:YES];
fetch.sortDescriptors = @[sortTime];
self.controller = [[NSFetchedResultsController alloc] initWithFetchRequest:fetch
managedObjectContext:self.managedObjectContext
sectionNameKeyPath:@"lessonToTime.start"
cacheName:nil];
}
return self;
}
#pragma mark - Table view data source
- (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 1;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
// Configure the cell...
//UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (!cell) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
Lessons *lesson = [self.controller objectAtIndexPath:indexPath];
cell.textLabel.text = lesson.lesson;
return cell;
}
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {
id <NSFetchedResultsSectionInfo> sectionInfo = [[self.controller sections] objectAtIndex:section];
// This is the first lesson in this section:
Lessons *lesson = [sectionInfo objects][0];
//For testing I changed the type of 'start' and 'end' to string
NSLog(@"start: %@",lesson.lessonToTime.start);
NSLog(@"end: %@", lesson.lessonToTime.end);
NSString *title = [NSString stringWithFormat:@"%@-%@",
lesson.lessonToTime.start,
lesson.lessonToTime.end];
return title;
}
結果:
一般情況下,你使用'sectionNameKeyPath :'參數將表視圖分組爲部分。但是你的要求並不明確:如果A是9-11,B是9-10,C是10-11,那該怎麼辦?這些應該如何分組,以及部分標題應該是什麼? –
@MartinR時代已經到來。它總是這樣:9-10 =>課A,課B; 10-11 =>課程C,課程D,課程E,課程F ...我希望現在很清楚。 – iCode
「天」實體是否描述一天,例如星期一或星期二?我只是想知道複數形式。 –