【发布时间】:2013-11-28 06:25:47
【问题描述】:
我正在使用 cocoa-binding 将NSTableView 绑定到Core Data,如下所示
_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 的automaticallyPreparesContent 和automaticallyRearrangesObjects 属性的效果。根据文档,默认情况下两者都是NO,我也没有更改它们。
Doc 说
如果标志为 YES 并且设置了托管对象上下文,则使用当前提取谓词从托管对象上下文中提取初始内容。控制器还注册为其托管对象上下文的观察者。然后它使用上下文的通知跟踪其实体的插入和删除,并根据需要更新其内容数组。
我认为这意味着,如果标志为 NO,则内容数组不会使用新插入的对象更新到托管对象上下文。但是当我将新的托管对象插入托管对象上下文时,它会更新。我误会了什么?
而且,关于automaticallyRearrangesObjects Doc 说
设置接收方是否自动重新排列其内容以对应当前的排序描述符和过滤谓词。
这意味着,我认为,如果标志为 NO,即使更改了数组控制器的排序描述符或过滤谓词,内容也不会重新排列。但它是!当我更改过滤谓词或排序描述符时,绑定到数组控制器的表视图上的行会重新排列。
对于 NSArrayController 的行为我不知道或误解了什么,我感到很困惑。
【问题讨论】:
标签: macos core-data cocoa-bindings