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

标签 objective-c cocoa drag-and-drop object-model pasteboard

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

这是场景...

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

该列表与 NSTableView 相关联通过 NSArrayController . NSTableView是一个阻力源,我有一个 NSView作为拖动目的地。

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

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

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

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

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

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

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

Drag and Drop Programming Topics

Pasteboard Programming Guide

非常感谢任何帮助。

最佳答案

粘贴板只是不同类型数据的容器,所以无论您放在粘贴板上的什么,都必须可以转换为某种类型的数据。

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

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

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

关于objective-c - 在拖放操作中传递对象指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3774635/

相关文章:

cocoa - NSPathControl 和 NSPathControlItem 是满是错误还是我? (优胜美地)

angular - 使用 Angular Material CDK 拖放自定义静态组件

cocoa - NSOpenPanel 使应用程序卡住几秒钟

cocoa - 拦截保存在核心数据文档中

ios - 使用 AFNetworking 从多个资源中获取数据并返回

ios - Apple Mach-O 链接器错误。架构arm64中的重复符号

javascript - 如何通过 AJAX 拖放动态生成的表

javascript - 在谷歌地图中拖放标记

ios - 在...的对象上找不到属性 NSManagedObjects 上的错误调试属性

ios - 如何将一个NSArray数据添加到另一个NSArray字段?