4

是否可以在拖放操作中将指针传递给对象?

这是场景...

我有一个自定义对象的“NSArray”。为了争论,我们会说这是一个人对象的列表。

该列表NSTableView通过一个NSArrayController. 这NSTableView是一个拖动源,我有一个NSView作为拖动目的地。

实现拖放时,我可以在拖动过程中轻松地从NSArrayControlleras中获取当前选定人员的姓名,NSString并将其传递给NSView.

但是,我希望能够将指针传递给 person 对象,以便接收者可以访问整个对象。

问题似乎是拖动操作创建了一个新的人员对象实例,并且尽管在人员模型中实现了所需的方法,但并没有对选定的人员对象进行引用。结果,我在目的地得到了一个人对象,它只是没有填充来自对象的数据。

理想情况下,我想要对象指针,因为 NSView 将使用对象引用,以便对对象本身的任何更新都反映在NSViewNSTableView(以及使用对象的其他任何地方)中。

是否甚至可以在拖放操作中使用对象引用,或者我是否需要传递一些自定义引用,即 person 对象的 iVar,然后在它到达目的地后进行查找?(考虑到引用 Obj-c 的对象有多少,这对我来说似乎有点过时)。

我知道目标可以接受来自应用程序外部的拖动操作,但是将操作指定为本地操作会解决这个问题,不是吗?

我已经检查了苹果文档,但似乎仍然无法找到答案。

拖放编程主题

粘贴板编程指南

非常感谢任何和所有帮助。

4

1 回答 1

3

粘贴板只是不同类型数据的容器,因此您在粘贴板上放置的任何内容都必须可以转换为某种类型的数据。

您需要为每个 Person 对象提供某种标识符,并将其放在粘贴板上您自己发明的自定义类型标识符下。通常,这样的标识符应该是你的应用程序的包标识符(它应该是你的域名加上你的应用程序名称的反面——例如,com.example.surfwriter)加上类型的名称(例如,com.example.surfwriter .tabstop)。

收到掉落物时,请检查此类型。如果它存在,查找正确的对象并做任何你应该用它做的事情。从表视图拖动到同一个表视图应该通过将对象移动或复制到新行来实现这一点。

不要使用对象的地址——即对象本身——作为它的标识符。如果对象死亡(例如,被删除),地址将不再有效,或者可能引用不同的对象(可能与原始对象属于同一类,也可能不属于同一类)。使用您可以查找并且安全找不到的东西。这适用于剪切/复制和粘贴而不是拖动,但是您可以并且应该使用几乎相同的代码来处理两者。

于 2010-09-23T03:23:45.380 回答