【发布时间】:2013-11-20 08:30:12
【问题描述】:
我将NSArrayController 绑定到有超过 100k 行要获取的核心数据,并将 UseLazyFetching 设置为 TRUE。 NSTableView 肯定会绑定到 NSArrayController。一切都像这样以编程方式设置:
@implementation MainWindowController {
NSArrayController *_arrayController;
}
- (void)windowWillLoad
{
_arrayController = [[NSArrayController alloc] init];
[_arrayController setManagedObjectContext:self.managedObjectContext];
[_arrayController setEntityName:@"User"];
[_arrayController setUsesLazyFetching:YES];
[_arrayController setSelectsInsertedObjects:NO];
[_arrayController setPreservesSelection:NO];
[_arrayController fetchWithRequest:nil merge:NO error:NULL];
}
- (void)windowDidLoad
{
[super windowDidLoad];
[self.tableView bind:NSContentBinding
toObject:_arrayController
withKeyPath:@"arrangedObjects"
options:nil];
}
我发现滚动时由延迟获取选项触发的所有获取操作都在主线程中运行,这导致 UI 在获取运行时被阻塞。以下来自仪器。
有没有办法在后台线程中运行获取?
我尝试过使用NSPrivateQueueConcurrencyType 初始化的托管对象上下文,但这没有什么区别。 :(
或者使用可可绑定和核心数据来处理表格视图中的大量行是不是很糟糕?我对 iOS 中的 NSFetchedResultsController 非常熟悉,并在 OS X 中寻找类似的操作。
【问题讨论】:
标签: macos core-data cocoa-bindings