经过几个小时/天的搜索和潜水示例项目,我已经断定我需要问一下。如果我将assetsView(IKImageBrowserView
)直接绑定到NSArrayController
的IB实例,则一切正常。如何以编程方式用CoreData行填充NSArrayController?
- (void) awakeFromNib
{
library = [[NSArrayController alloc] init];
[library setManagedObjectContext:[[NSApp delegate] managedObjectContext]];
[library setEntityName:@"Asset"];
NSLog(@"%@", [library arrangedObjects]);
NSLog(@"%@", [library content]);
[assetsView setDataSource:library];
[assetsView reloadData];
}
NSLogs
都是空的。我知道我错过了一些东西......我只是不知道是什么。目标是最终允许用谓词以编程方式过滤此视图的“库”的多个实例。现在我只是想让它显示“资产”实体的所有行。
此外:如果我在IB中创建NSArrayController
,然后尝试记录[library arrangedObjects]
或手动设置assetsView的数据源,我会得到相同的空结果。就像我之前说过的,如果我在IB中绑定library.arrangedObjects
到assetsView.content
(IKImageBrowserView
) - 具有相同的托管对象上下文和由IB设置的相同实体名称,则一切都按预期工作。
- (void) awakeFromNib
{
// library = [[NSArrayController alloc] init];
// [library setManagedObjectContext:[[NSApp delegate] managedObjectContext]];
// [library setEntityName:@"Asset"];
NSLog(@"%@", [library arrangedObjects]);
NSLog(@"%@", [library content]);
[assetsView setDataSource:library];
[assetsView reloadData];
}