表视图不根据绑定更新 - 第二部分

Pet*_*sey 2 macos cocoa nstableview nsarraycontroller cocoa-bindings

这个问题借来的标题,其中一个重复.在那里看到我的答案,因为那个提问者出了什么问题; 我是那个答案的作者,而我的问题不是那个问题.

我有一个包含三列的表视图,其Value绑定绑定到arrangedObjects数组控制器的三个属性.数组控制器contentArray绑定到visitationResults我的文档对象; 该数组中的项是模型类(VisitationResult)的实例.我还绑定了数组控制器selectionIndexessortDescriptors我的文档的属性.

我通过几个访问者改变我的财产:

- (void) addVisitationResult:(VisitationResult *)newVisitationResult {
    [self insertObject:newVisitationResult inVisitationResultsAtIndex:[self countOfVisitationResults]];
    NSLog(@"arrayController arrangedObjects: %@", [arrayController arrangedObjects]);
}
Run Code Online (Sandbox Code Playgroud)

NSLog语句运行,并确认阵列控制器正在收集和排列我的模型对象.这意味着我正在通过我的财产并获取我的文件的KVO通知(这证明了先前的提问者的问题,绕过该属性的问题,不是我遇到的问题).

NSLog在模型对象类的访问器方法中添加了语句.其中一个是由数组控制器调用,以便对对象进行排序(该属性是排序键).阵列控制器不知道的其他两个从未被调用过.

因此,我的表格视图仍为空白.

Pet*_*sey 6

我发现这个问题:这是因为我曾明确约束selectionIndexessortDescriptors表视图的绑定.

无论如何,这不是必要的:我刚检查过,文档说:

selectionIndexes

通常,selectionIndexes自动绑定到第一个NSTableColumn绑定的NSArrayController.

sortDescriptors

通常,此绑定是自动创建的,绑定到最初绑定的NSTableColumn的NSArrayController的排序描述符.

它似乎不仅没有必要,而且绑定这两者中的一个或两个将打破表格视图.