设置
我有NSCollectionView
。我在View Prototype
中有一个复选框。我已成功设置绑定,以便填充Card Title
和action
。 (图1,下方)
目标
当我点击该复选框时,我想运行一个访问CardModel
已经能够访问的特定View Prototype
的函数。然后我会相应地操纵它的数据。
研究
我在SO上发现了这篇文章:Get the representedObject values of NSCollectionViewItem NSButton click,它很好地描述了我的情况。遗憾的是,答案是没有具体的代码。这是建议的内容:
因此,首先,将按钮单元格的代表对象设置为 拥有该按钮的集合视图项。 (您可以在笔尖中执行此操作 编辑。)然后,在你的动作方法中,获取按钮的单元格,然后是 单元格表示的对象(即项目),然后是项目的对象 代表对象。
看起来很简单吧?
尝试解决方案
我创建了一个方法cardCheckBoxClicked:
并将其连接到复选框。
根据上述建议,我将button cell
的来法representedObject
与Card Collection View Item
联系起来。 (图2)
然后我尝试在代码中获取Card Collection View Item
的{{1}}。
来自representedObject
:
MainWindowController.h
错误
当我点击复选框时,出现以下错误:
-(IBAction)cardCheckBoxClicked:(id)sender
{
CardModel* cModel = [[sender representedObject] representedObject];
NSLog(@"card title: %@",cModel.title);
}
问题!
那么 - 我如何访问-[NSButton representedObject]: unrecognized selector sent to instance 0x6080001581b0
代表的对象?我误解了上面给出的建议吗?如何成功访问我需要的数据?
图片(参考)
绑定示例
表示对象连接
答案 0 :(得分:4)
这里:
-[NSButton representedObject]:
您是否要求类NSButton运行方法representObject。确保区分Class,该类的对象或实例。
您需要获取实际按钮,获取其按钮单元格(至少我认为这是您想要的),然后在单元格上调用representObject。如果我正确理解你。我从不接触界面构建器,所以这里完全编写了符合您要求的代码。
someObject = [[theButton cell] representedObject];
答案 1 :(得分:0)
除了CH Buckingham的回答,你还应该考虑使用绑定。您可以将复选框的值绑定绑定到集合视图项,并将模型关键路径representedObject
绑定到CardModel
上的某个属性。 (如果需要,键路径可以继续通过模型对象图。)只要按钮被切换,就会设置该属性。