在我的应用程序中,我想使用大纲视图来显示不同类型对象的属性。由于从外部数据库检索属性,因此在编译时不知道它们;因此,我需要动态添加列。
我已经设置了Cocoa绑定来显示值,但是我遇到了一些非常严重的性能问题。当我在Interface Builder中使用绑定定义列时,性能非常好。但是当我添加列并以编程方式绑定到相同的值时,应用程序在滚动时会挂起几秒钟,使用100%的CPU。
每个dynamicAttributes属性都包含一个具有以下结构的NSDictionary:
我使用以下代码添加列:
for (NSString *key in instDynAttsDict) {
NSTableColumn *column = [[NSTableColumn alloc] initWithIdentifier:key];
column.title = key;
[self.instancesOutlineView addTableColumn:column];
NSString *keyPath = [NSString stringWithFormat:@"arrangedObjects.dynamicAttributes.%@.value", key];
[column bind:NSValueBinding toObject:self.instancesTreeController withKeyPath:keyPath options:nil];
}
我在这里发布了一个测试项目,其中包含一些示例数据:https://drive.google.com/open?id=0B5lGn_3atgSeNWVUX3l6cmVxUUE
您需要将数据库OSXCoreDataObjC.storedata
复制到Application Support目录中。 (特定路径在应用启动时注销。)