从基于视图的表视图中删除行时不发送通知

Posted

技术标签:

【中文标题】从基于视图的表视图中删除行时不发送通知【英文标题】:No notification sent when a row is deleted from a view-based table view 【发布时间】:2014-05-27 18:04:28 【问题描述】:

我正在使用 Xcode 5 开发一个简单的核心数据应用程序,该应用程序具有表格视图和用于添加/删除行的按钮。我从 基于单元格的 表格视图开始。视图委托接收 tableViewSelectionDidChange 通知,以便在未选择任何行时禁用删除按钮:

- (void)tableViewSelectionDidChange:(NSNotification *)notification 
    // enable/disable removeButton according to rows selected
    [removeButton setEnabled:([tableView numberOfSelectedRows] ? YES : NO)];
    NSLog(@"numberOfSelectedRows: %li", [tableView numberOfSelectedRows]);

这按预期工作。

然后,我将表格视图更改为 基于视图 模式,以便将更多数据单元格添加到行中。这就是问题所在。我单击一行来选择它——删除按钮已启用。单击按钮 - 该行被删除,但未发送通知,因此该按钮仍处于启用状态,即使没有突出显示任何行。有趣的是,当我再次单击删除时,另一行被删除了!我被难住了。 SO上没有提到这个问题,谷歌也没有帮助。

有什么想法吗?你可以在这里下载两个版本:bitpals.de/cloudlock.zip

【问题讨论】:

【参考方案1】:

现在一切都好;经过数小时顽强的谷歌搜索,我找到了解决方案。

似乎需要一个模糊的绑定来保持表格视图选择与数组控制器同步。

表视图的Selection Indexes 必须绑定到数组控制器selectionIndexes

在 cocoabuilder.com 上查看 View based NSTableView and NSArrayController not in sync。

【讨论】:

以上是关于从基于视图的表视图中删除行时不发送通知的主要内容,如果未能解决你的问题,请参考以下文章

弹出框控件在选择不同的表视图行时更改其位置

从选定索引处的表视图中的数组中删除

从 Core Data 管理的表视图中删除对象时出错

mysql之视图

从视图及其所有相关表中删除记录

从表视图中删除特定行