Macos NSArrayController的automaticallyPreparesContent和AutomaticallyArrangesObject用于什么?
我使用cocoa绑定将Macos NSArrayController的automaticallyPreparesContent和AutomaticallyArrangesObject用于什么?,macos,core-data,cocoa-bindings,Macos,Core Data,Cocoa Bindings,我使用cocoa绑定将NSTableView绑定到核心数据,如下所示 _arrayController = [[MyArrayController alloc] init]; [_arrayController setEntityName:@"User"]; [_arrayController setManagedObjectContext:self.managedObjectContext]; [_arrayController setUsesLazyFetching:NO]; [self.
NSTableView
绑定到核心数据,如下所示
_arrayController = [[MyArrayController alloc] init];
[_arrayController setEntityName:@"User"];
[_arrayController setManagedObjectContext:self.managedObjectContext];
[_arrayController setUsesLazyFetching:NO];
[self.tableView bind:NSContentBinding toObject:self.arrayController withKeyPath:@"arrangedObjects" options:nil];
[_arrayController fetch:nil];
一切似乎都很顺利
但有一件事我不明白,那就是NSArrayController的automaticallyPrepareContent
和automaticallyArrangesObjects
属性的效果。根据文档,默认情况下,两者都是NO
,我也没有更改它们。
说
如果标志为“是”,并且设置了托管对象上下文,则使用当前提取谓词从托管对象上下文提取初始内容。控制器还注册为其托管对象上下文的观察者。然后,它使用上下文的通知跟踪其实体的插入和删除,并根据需要更新其内容数组
我认为这意味着,如果标志为“否”,则内容数组不会使用新插入的对象更新为托管对象上下文。但当我向托管对象上下文插入新的托管对象时,它会更新。我误解了什么
而且,关于automaticallyrarrangesobjects
说
设置接收器是否自动重新排列其内容以对应于当前排序描述符和筛选器谓词
这意味着,我认为,如果标志为“否”,即使数组控制器的排序描述符或过滤器谓词发生更改,内容也不会重新排列。但事实的确如此!当我更改过滤器谓词或排序描述符时,表视图上绑定到数组控制器的行将被重新排列
对于NSArrayController的行为,我很困惑我不知道或误解了什么。“AutomaticallyPrepareContent”确定是在CoreData数据库上自动完成填充arrayController的初始提取,还是您必须自己完成
如果要在初始提取之前执行特殊提取或在代码中进行一些额外设置,可以将其关闭
“AutomaticallyArrangsObjects”确定arrayController在您更改对象中的一个值时是否重新排序,而不是在您更改排序或筛选器时是否重新排序。例如,如果您在“标题”上排序,并且更改了对象的标题,那么您必须手动告诉arrayController更新自身还是自动进行更新
如果有数千行,您可能会关闭后一个选项,因为在成吨的项目上设置KVO实际上相当慢。如果禁用“准备内容”,我是否需要编写代码,或者仍然可以使用接口构建来获取数据?(在我的例子中,NSArrayController绑定到NSComboxCell)