Cocoa 偷懒抓人&;维护已排序的NSArrayController
我有一个样本项目在 设置非常简单。在我的CoreData模型中,我有两个实体:Cocoa 偷懒抓人&;维护已排序的NSArrayController,cocoa,core-data,nsarraycontroller,Cocoa,Core Data,Nsarraycontroller,我有一个样本项目在 设置非常简单。在我的CoreData模型中,我有两个实体: 具有名称属性和与项目实体的多对多关系(项目)的工具架 具有name属性的项与工具架实体(其“父项”)有关系 然后我有两个NSArray控制器: 具有“实体名称”模式的搁板阵列控制器,实体名称为“搁板”。它准备内容并使用延迟抓取 模式为“实体名称”的项数组控制器,实体名称为“项”。它不准备内容,也不使用延迟抓取。它的内容集绑定到Shelf数组控制器的选择和“items”属性 在窗口中,我有两个NStableView和
所以,我不明白的是,为什么我在启用延迟抓取的情况下看到这种行为。这似乎有可能是一个bug。如果是这样,我当然可以提交一份可能是重复的报告。但是,我猜,有一些很好的解释和一种标准的处理方法,因此项目仍然按照数组控制器的arrangedObjects数组中的排序描述符进行排序。我找到了在为NSArrayController(在IB中)启用延迟抓取后强制排序的唯一方法was要在awakeFromNib中发送延迟设置为0的performSelector:withObject:afterDelay:
- (无效)awakeFromNib{ [自执行选择器:@selector(sort)with object:self afterDelay:0.0]; }
- (无效)排序{ NSSortDescriptor*排序=[NSSortDescriptor SortDescriptor WithKey:@“” 上升:是] [self.AC_控制器设置端口描述符:[NSArray arrayWithObject:sorting]; }
- 似乎在加载包含NSArrayController的nib时,nib加载机制会根据IB设置调用延迟抓取,但这会覆盖您可能试图以编程方式或通过NSTableView中的IB设置的任何排序-通过等待下一个运行循环,排序将“接受”OK