无法从 Objective-C 中的单独 NSWindow 在 NSPanel 中执行方法

Cannot execute method in an NSPanel from a separate NSWindow in Objective-C

提问人:SimonKravis 提问时间:9/9/2021 最后编辑:CœurSimonKravis 更新时间:5/9/2022 访问量:42

问:

我有一个 MacOS Objective-C 项目,其父级为 NSWindow,NSPanel 包含一个 TableView,其委托和数据源是一个名为 TableController 的类。通过从另一个项目剪切和粘贴,将表控制器放置在 MainMenu.xib 的 Objects 部分。“表控制器”不会出现在“显示库”可见的控件中。在加载父窗体时,将执行使用 TableController.m 中的数据填充 TableView 的方法。我能够从 NSPanel 上的一个按钮执行这些方法,其中 MetadataView 是 NSPanel 上 TableView 控件的出口,定义为通过按住 ctrl 将 TableView 拖动到 TableController.h 中。[MetadataView reloadData];@property (weak) IBOutlet NSTableView *MetadataView;

如果我尝试使包含 reloadData 命令的方法成为类级而不是实例级(前缀 + 而不是 -)以允许从父窗体访问,我会收到错误“实例变量”MetadataView“在类方法中访问。

如何使包含reloadData命令的方法从父窗口上的按钮单击执行?

Objective-C 方法

评论

1赞 Willeke 9/9/2021
对不起,我不明白你想做什么。对象是单例吗?类(以大写字母开头)还是属性?哪个对象拥有表视图?哪个对象拥有面板?为什么要使用类方法?TableControllerMetadataView
0赞 El Tomato 9/9/2021
“如何使包含reloadData命令的方法从父窗口上的按钮单击中执行?”在英语中不是一个可以理解的句子,对吧?
0赞 SimonKravis 9/10/2021
最后一句的语法已修复。
0赞 SimonKravis 9/10/2021
MetadataView 是问题中定义的属性。我不认为 TableController 是一个单例。TableController.h 包含一系列属性,然后是 .你如何显示拥有另一个对象的对象?它是否是放置在窗口上的控件(如 TableView)的对象树中的顶部节点?所有者不会显示在任何 Inspector 面板中。我不是特别想使用类方法 - 我只需要执行父级的代码。@interface TableController : NSObject <NSTableViewDataSource, NSTableViewDelegate>@end
0赞 Willeke 9/10/2021
表视图是归表控制器所有还是由面板拥有?哪个对象负责重新加载表视图、表控制器或面板?父窗口是否从 MainMenu.xib 加载?

答: 暂无答案