Macos NSTableView&;CoreData:删除单击行中的对象

Macos NSTableView&;CoreData:删除单击行中的对象,macos,cocoa,core-data,nstableview,Macos,Cocoa,Core Data,Nstableview,我对核心数据非常陌生,目前正在开发一个小型(OSX)应用程序,它使用NSTableView来组织对象。现在,我想通过单击目标行上的按钮来删除行/对象 我通过调用[NSApp managedObjectContext]来访问表控制器中的托管对象(仍在尝试解决依赖注入问题),但我无法像以前使用数组那样轻松删除对象索引:(现在已被核心数据堆栈取代,对吧?) 如何识别要删除的对象?因此,如何才能将其从堆栈中干净地移除 这可能是一个非常基本的问题,但我找不到关于它的任何资源。绑定显然不起作用,因为在单击之

我对核心数据非常陌生,目前正在开发一个小型(OSX)应用程序,它使用
NSTableView
来组织对象。现在,我想通过单击目标行上的按钮来删除行/对象

我通过调用
[NSApp managedObjectContext]
来访问表控制器中的托管对象(仍在尝试解决依赖注入问题),但我无法像以前使用数组那样轻松删除
对象索引:
(现在已被核心数据堆栈取代,对吧?)

如何识别要删除的对象?因此,如何才能将其从堆栈中干净地移除

这可能是一个非常基本的问题,但我找不到关于它的任何资源。绑定显然不起作用,因为在单击之前没有选中该行


非常感谢您的帮助

绑定可以工作,因为您可以让按钮的iAction查询父NSTableCellView的
objectValue
。一旦获得该objectValue,就可以调用绑定的arrayController来删除该对象,然后单元格/行就会消失

因此,如果您有一个tableCellView,它有一个带有iAction的delete按钮,在该iAction中,您可以获取发件人的superview,确保它是一个NSTableCellView,获取objectValue,然后调用
[myArrayController removeObject:…]

正如NSTableCellView类参考中所述:

objectValue在使用绑定时由表自动设置,或者是NSTableViewDataSource协议方法tableView:objectValueForTableColumn:row:返回的对象

这实际上是cocoa中视图的典型模式
objectValue
或通常
representedObject
是视图上的属性,这些视图引用了它们所表示的数据模型对象,因此,如果您在iAction上有来自
sender
的视图指针,则可以获取相关的数据模型对象。如果您使用的是绑定和控制器,那么您可以让控制器删除该对象

使用绑定,您通常会创建需要附加iActions的按钮,而不是一些直接绑定。但是这些iAction可以与控制器交互,而不是与视图交互


对于核心数据,阵列控制器非常灵活,而假设您必须以编程方式完成这一切。

谢谢您的格式化,Larme!谢谢stevesliva,我没有收到你回复的电子邮件,所以我现在只看到了这封邮件。我通过调用
[[[NSApp delegate]managedObjectContext]deleteObject:mo2delete]解决了这个问题
并使用
[TableView selectRowIndexes:…]获取对象。
没问题——我仍然没有按照我想要的方式设置通知。关于你做这件事的方式——总是有几种方式,但我没有假设带按钮的行被选中。如果表不允许选择,您的解决方案可能无法工作。我通过发送方选择行,例如:
-(iAction)按钮删除:(id)发送方{NSUInteger row=[TableView rowForView:sender];[TableView selectRowIndexes:[NSIndexSet alloc]initWithIndex:row]byExtendingSelection:NO];[self-DeleteSelectedObject];]
似乎有点复杂,但也允许我在稍后阶段进行多选。这是一种糟糕的编程风格吗?我看不出你这样做有什么问题。就访问链接模型/视图的方式而言,它是以视图为中心的,而不是以控制器为中心的,但这两种方式都不同,代码都在控制器实现中。我只是将我的评论与你的评论进行对比——这在没有行选择的情况下是可能的。这听起来很有道理,但我没能做到这一点。我在和斯威夫特合作,但我想事情应该还是一样的。在我的iAction中,我通过
sender.superview访问
NSTableCellView
如上所述。但是这个对象确实有一个空的
objectValue
属性<代码>让obj=(sender.superview!作为NSTableCellView)。objectValue。表格视图绑定到ArrayController,表格单元格视图中的文本字段正确显示内容。在delete方法中,我无法访问特定行的objectValue/representedObject。有什么想法吗?