如何在Core Data Entity中设置NSTableView中的组行?

时间:2016-01-13 12:53:55

标签: objective-c cocoa core-data nstableview nsarraycontroller

我的问题与StackOverflow上发布的这个问题有关。

similar question

在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;
}

结果:

Screenshot of NSTableView

0 个答案:

没有答案