1

我有一个 NSArrayController 配置了模式“实体”,其中包含选择的“人员”和“准备内容”类型的核心数据实体。所有其他属性都是默认属性。正如预期的那样,当我创建新的人员实体(通过单击按钮)时,这个数组控制器会更新它的排列对象:

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

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

如果我在表格中编辑“文本”属性并添加另一个人(当表格单元仍处于编辑模式时)表格失去焦点,编辑将结束并且新人显示在表格中。一切看起来都很好。

但是,如果我想添加另一个人,arrayController 不会更新排列对象属性(我发现不再调用 arrayController 的 setContent:)。

这是预期的行为吗?

4

2 回答 2

5

我自己找到了答案。我注意到在我编辑表格后没有发送 NSManagedObjectContextObjectsDidChangeNotifications(就像他们之前所做的那样)。

链接为我指明了正确的方向。在我以下列方式修改我的 addEntity 方法后,一切都按预期工作:

-(IBAction)addEintrag:(id)sender {
 Person* new = [NSEntityDescription insertNewObjectForEntityForName:@"Person" 
                          inManagedObjectContext:[self managedObjectContext]];
 new.name = @"test";
 new.datum = [NSDate date];
 [self.managedObjectContext processPendingChanges];
}
于 2013-02-01T09:52:51.847 回答
0

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

于 2013-01-31T21:31:02.373 回答