我的问题与StackOverflow上发布的这个问题有关。
在iOS中,NSFetchedResultController具有section参数,当获取属性时,当属性设置为 sectionNameKeyPath:部分时,该参数可以从Core Data获取数据。
在Cocoa中,NSTableView使用浮动组行来显示部分。 我的托管对象模型包含两个实体。
实体1
实体:作者
属性:名称
实体2
实体:预订
属性:标题
关系 booksByAuthor是ToMany。
我想在NSTable浮动组行中显示作者姓名,然后在下面的行中显示书籍标题。
要设置组单元格,我使用以下tableView委托方法
-(NSView *)tableView:(NSTableView *)tableView viewForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row;
-(BOOL)tableView:(NSTableView *)tableView isGroupRow:(NSInteger)row;
-(CGFloat)tableView:(NSTableView *)tableView heightOfRow:(NSInteger)row;
我正在使用NSArrayController设置表视图数据。
我为此搜索了教程,但Cocoa的可用性不高。我很新,所以请耐心等待。我被困在这里,任何人都可以帮助我。我是否需要更改模型对象。
修改1
我尝试了这种方法,但结果是混乱的
-(NSView *)tableView:(NSTableView *)tableView viewForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row{
NSArray *bookTitleArray = [[self.bookArrayController arrangedObjects]valueForKey:@"title"];
NSArray *fromAuthorArray = [[self.bookArrayController arrangedObjects]valueForKey:@"fromAuthor"];
Author *authorName = fromAuthorArray[row];
NSMutableArray *testArray = [[NSMutableArray alloc]init];
for (Author *auth in fromAuthorArray) {
[testArray addObject:auth];
for (Book *book in auth.books) {
if (book.fromAuthor.name == auth.name) {
[testArray addObject:book.title];
}
}
}
if ([testArray[row]isKindOfClass:[Author class]] ){
NSTableCellView *newCell = [tableView makeViewWithIdentifier:@"authorCell" owner:self];
[newCell.textField setStringValue:authorName.name];
return newCell;
}else if (![testArray[row]isKindOfClass:[Book class]]){
NSTableCellView *cellView = [tableView makeViewWithIdentifier:@"titleCell" owner:self];
[cellView.textField setStringValue:bookTitleArray[row]];
return cellView;
}
return nil;
}
-(BOOL)tableView:(NSTableView *)tableView isGroupRow:(NSInteger)row{
NSArray *fromAuthorArray = [[self.bookArrayController arrangedObjects]valueForKey:@"fromAuthor"];
NSMutableArray *testArray = [[NSMutableArray alloc]init];
for (Author *auth in fromAuthorArray) {
[testArray addObject:auth];
for (Book *book in auth.books) {
if (book.fromAuthor.name == auth.name) {
[testArray addObject:book.title];
}
}
}
if ([testArray[row]isKindOfClass:[Author class]]) {
return YES;
}else if ([testArray[row]isKindOfClass:[Book class]]){
return NO;
}
return NO;
}
结果: