在编辑了具有内容绑定的NSTableView之后,实体模式下的NSArrayController未更新

时间:2013-01-31 19:12:36

标签: macos core-data nstableview cocoa-bindings nsarraycontroller

我有一个配置了模式'Entity'的NSArrayController,它包含所选类型为'Person'和'Prepares Content'的Core-Data-Entities。所有其他属性都是默认属性。正如所料,当我创建新的Person-entities时(通过按钮单击),此arraycontroller更新其arrangeObjects:

-(IBAction)addEntity:(id)sender{
  Person* new = [NSEntityDescription insertNewObjectForEntityForName:@"Person"
                           inManagedObjectContext:[self managedObjectContext]];
  new.text = @"text";
  new.date = [NSDate date];
}

我已将基于视图的NSTableView的内容绑定到此arrayController的'arrangeObjects'属性,以显示Persons。在一列中,我有一个可编辑的(但默认情况下是默认的)NSTextField绑定到TableCellView的'objectValue.text'属性。

如果我编辑表格中的'text'属性并添加另一个人(当tablecell仍然处于编辑模式时),表将失去焦点,编辑结束并且新人将显示在表中。一切都很好。

但是如果我想添加另一个人,arrayController不会更新arrangeObjects-property(我发现不再调用arrayController的setContent:)。

这是预期的行为吗?

2 个答案:

答案 0 :(得分:5)

我自己找到了答案。我注意到在编辑表之后没有发送NSManagedObjectContextObjectsDidChangeNotifications(就像之前一样)。

link指出了正确的方向。在我按照以下方式修改了我的addEntity方法后,一切都按预期工作:

-(IBAction)addEintrag:(id)sender {
 Person* new = [NSEntityDescription insertNewObjectForEntityForName:@"Person" 
                          inManagedObjectContext:[self managedObjectContext]];
 new.name = @"test";
 new.datum = [NSDate date];
 [self.managedObjectContext processPendingChanges];
}

答案 1 :(得分:0)

如果您希望arrayController自动重新排列对象,请在Interface Builder中检查arrayController上的“Auto Rearrange Content”复选框,或以编程方式使用setAutomaticallyRearrangesObjects: