是否可以在拖放操作中将指针传递给对象?
这是场景...
我有一个自定义对象的“NSArray”。为了争论,我们会说这是一个 person 对象的列表。
该列表与 NSTableView
相关联通过 NSArrayController
. NSTableView
是一个阻力源,我有一个 NSView
作为拖动目的地。
在执行拖放操作时,我可以轻松地从 NSArrayController
中获取当前选定人员的姓名作为NSString
在拖动过程中传递给NSView
中的接收者.
但是,我希望能够传递一个指向 person 对象的指针,以便接收者可以访问整个对象。
问题似乎是拖动操作创建了一个人对象的新实例,尽管在人模型中实现了所需的方法,但并未引用所选人对象。结果我在目的地得到了一个人对象,只是没有填充来自该对象的数据。
理想情况下,我想要对象指针,因为 NSView 将使用对象引用,以便对对象本身的任何更新都反射(reflect)在 NSView
中。和 NSTableView
(以及在其他任何地方都使用该对象)。
是否可以在拖放操作中使用对象引用,或者我是否需要传递一些自定义引用,即 person 对象的 iVar,然后在它到达目的地后进行查找? (考虑到 Obj-c 有多少对象引用,这对我来说似乎有点陈旧)。
我知道目标可以接受来自应用程序外部的拖动操作,但是将操作指定为本地操作将说明这一点,不是吗?
我已经查看了 apple 文档,但似乎仍然无法找到答案。
Drag and Drop Programming Topics
非常感谢任何帮助。
最佳答案
粘贴板只是不同类型数据的容器,所以无论您放在粘贴板上的什么,都必须可以转换为某种类型的数据。
您需要为每个 Person 对象提供某种标识符,并将其放在您自己发明的自定义类型标识符下的粘贴板上。一般来说,这样的标识符应该是你的应用程序的包标识符(应该是你的域名加上你的应用程序名称的倒序——例如,com.example.surfwriter)加上类型的名称(例如,com.example.surfwriter .tabstop)。
收到掉落物时,请检查此类型。如果它存在,请查找正确的对象并对它做任何你应该做的事情。从 TableView 到同一个 TableView 的拖动应该通过将对象移动或复制到新行来实现。
不要使用对象的地址——即对象本身——作为它的标识符。如果对象死亡(例如,被删除),地址将不再有效,或者可能指向不同的对象(它可能与原始对象属于同一类,也可能不同)。使用您可以查找并且安全地找不到的东西。这更适用于剪切/复制和粘贴而不是拖动,但您可以而且应该使用几乎相同的代码来处理这两者。
关于objective-c - 在拖放操作中传递对象指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3774635/