Objective c 在拖放操作中传递对象指针

Objective c 在拖放操作中传递对象指针,objective-c,cocoa,drag-and-drop,object-model,pasteboard,Objective C,Cocoa,Drag And Drop,Object Model,Pasteboard,在拖放操作中是否可以将指针传递到对象 下面是一个场景 我有一个自定义对象的“NSArray”。为了便于讨论,我们将说这是person对象的列表 该列表通过NSArrayController绑定到NSTableView。NSTableView是一个拖动源,我有一个NSView作为拖动目标 在执行拖放操作时,我可以轻松地从NSArrayController获取当前选定人员的姓名,作为拖动过程中的NSString,并将其传递给NSView中的接收者 但是,我希望能够传递一个指向person对象的指针,

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

下面是一个场景

我有一个自定义对象的“NSArray”。为了便于讨论,我们将说这是person对象的列表

该列表通过
NSArrayController
绑定到
NSTableView
NSTableView
是一个拖动源,我有一个
NSView
作为拖动目标

在执行拖放操作时,我可以轻松地从
NSArrayController
获取当前选定人员的姓名,作为拖动过程中的
NSString
,并将其传递给
NSView
中的接收者

但是,我希望能够传递一个指向person对象的指针,以便接收方能够访问整个对象

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

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

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

我知道目标可以接受来自应用程序外部的拖动操作,但将该操作指定为本地操作可以解释这一点,不是吗

我查看了苹果的文档,但似乎仍然找不到答案


非常感谢所有帮助。

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

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

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


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

谢谢Peter!看起来我正盯着正确的道路——只是走得不够远。很高兴知道不使用对象本身的地址-我只是在研究这是否是一个可行的选择。时间就是一切!:-)彼得,我只是想让你知道这很有效。:-)谢谢我最终在一个全局方法类中创建了标识符前缀。然后,每个模型都有一个
pasteboardRef
方法,该方法返回它自己的类名和对象的唯一ID。然后,它通过粘贴板发送,在目标上拾取并解析,以返回类和ID。真有魅力!