是否可以在拖放操作中将指针传递给对象?
这是场景......
我有一个自定义对象的'NSArray'。为了论证,我们会说这是一个人物对象列表。
该列表通过NSTableView
绑定到NSArrayController
。 NSTableView
是一个拖动源,我有一个NSView
作为拖动目的地。
在实施拖放时,我可以轻松地将NSArrayController
中当前所选人员的名称作为拖动过程中的NSString
,并将其传递给{NSView
中的接收者1}}。
但是,我希望能够将指针传递给person对象,以便接收者可以访问整个对象。
问题似乎是拖动操作创建了一个person对象的新实例,并且尽管在person模型中实现了所需的方法,但并未引用所选的person对象。结果,我在目的地获得了一个人物对象,它没有填充来自物体的数据。
理想情况下,我想要对象指针,因为NSView将使用对象引用,以便对象本身的任何更新都反映在NSView
和NSTableView
(以及其他地方)使用对象。)
甚至可以在拖放操作中使用对象引用,还是需要传递一些自定义引用,该引用是person对象的iVar,然后在到达目标后进行查找? (考虑到Obj-c引用了多少对象,这对我来说似乎有些过时了。)
我理解目标可以接受来自应用程序外部的拖动操作,但是将操作指定为本地操作会解释这不是吗?
我检查了苹果文档,但似乎仍无法找到答案。
Drag and Drop Programming Topics
任何和所有帮助都非常感激。
答案 0 :(得分:3)
粘贴板只是不同类型数据的容器,因此您在粘贴板上放置的任何内容都必须可以转换为某种类型的数据。
您需要的是为每个Person对象提供某种标识符,并将其放在粘贴板上,并在您自己的发明的自定义类型标识符下。通常,这样的标识符应该是应用程序的包标识符(应该与您的域名相反,加上您的应用程序名称 - 例如,com.example.surfwriter)加上类型的名称(例如,com.example.surfwriter) .tabstop)。
收到丢弃时,请检查此类型。如果它存在,查找正确的对象并做任何你应该做的事情。从表视图拖动到同一个表视图应该通过将对象移动或复制到新行来实现此目的。
不要使用对象的地址 - 即对象本身 - 作为其标识符。如果对象死亡(例如,被删除),则地址将不再有效,或者可以引用不同的对象(其可以与原始对象可以是或可以不是同一类)。使用你可以查找并安全地找不到的东西。这适用于剪切/复制和粘贴,而不是拖动,但你可以并且应该用几乎相同的代码来处理它们。