升级项目后:删除现有行后 NSTableVIew 无法正确更新

Posted

技术标签:

【中文标题】升级项目后:删除现有行后 NSTableVIew 无法正确更新【英文标题】:After upgrading a project: NSTableVIew doesn't update correctly after deleting an existing row 【发布时间】:2014-03-06 15:40:12 【问题描述】:

自从我将项目从 xCode3 升级到 xCode5 后,NSTableView 出现了奇怪的问题。

如果我添加一个新行,视图会正确更新并显示新行。但是,如果我删除现有行,tableview 不会更新,我需要关闭并重新打开窗口才能查看更新的项目列表。

用作数据源的NSTableViewNSArrayController 都包含在一个xib 文件中。要添加和删除行,我通过添加和删除对象对数组控制器进行操作。这是删除项目的代码:

[[[self creatorsArrayController] selectedObjects] makeObjectsPerformSelector:@selector(remove)];
[[self creatorsArrayController] remove:sender];

显然老程序员出于某种原因同时使用了这两种方法。我也尝试删除这两行之一,但没有任何变化。

该代码在以前版本的 xCode 中运行良好,我怀疑在 xib 文件中升级后可能发生了一些变化,但我不知道它是什么。

谢谢

【问题讨论】:

【参考方案1】:

要更新 tableView,请使用

[yourTableViewOutletName reloadData];

删除一行之后。

【讨论】:

是的,我已经尝试过了,但它不起作用。令我感到奇怪的是,表格已针对任何其他操作正确更新,但不适用于删除行。【参考方案2】:

您使用的两行中的第一行对我来说没有多大意义(但我真的不知道,因为在那一行中,remove 消息被发送到被删除的对象,也许那是在您的应用程序中很重要),无论如何它似乎与从数组中删除对象无关。

您提供的信息很少,因此很难确定,但这里有一些想法需要检查:

    第二行应该只适用于选定的对象。如果您想以编程方式删除未选择的对象,则此方法不起作用(例如,您应该使用 removeObjectremoveObjectAtArrangedObjectIndex:)。 如果您使用的是 Core Data,您可能会考虑查看documentation 以获取一些可能相关的注释。 检查您的“删除”按钮是否正确绑定到 NSArrayController(除非您手动删除)

【讨论】:

是的,我选择了之前的项目将其删除,并且我正在手动删除(从上面的代码中可以看到)。我想强调一下,在升级到 xCode5 之前一切正常,问题在于刷新表(该对象已从 arrayController 中正确删除)。

以上是关于升级项目后:删除现有行后 NSTableVIew 无法正确更新的主要内容,如果未能解决你的问题,请参考以下文章

删除数据库行后刷新自定义游标适配器

更新/插入/删除表中的行后触发的触发器有问题

C# - 删除行后如何刷新 DataGridView

删除从部分删除的所有行后出现的 Tableview 部分

删除行后更新 indexPath 值

升级到 Xcode7 后现有项目中的警告消息