gpt4 book ai didi

objective-c - 使用 "setData"将项目添加到 NSPasteboard ?

转载 作者:行者123 更新时间:2023-12-03 17:45:37 26 4
gpt4 key购买 nike

我正在学习如何进行拖放以允许对 NSOutlineView 中的项目进行排序。 (这是我第一次使用 NSPasteboard)。

从我在网上找到的稍微相关的示例来看,您似乎使用:

[pasteboard setData: data forType: @"myapptype"];

当你进行移动时,应该将什么内容放入 NSData 中。这些示例将对象的存档版本作为数据。

在拖动项目时,对象属性可能会发生变化,因此我在其中填充指向对象的指针是否有意义?

最佳答案

不,您通常不想将指向对象的指针填充到粘贴板上。

粘贴板上必须(基本上)包含两种类型的内容之一:数据,或在要求时提供数据的 promise 。粘贴板的生命周期可能(并且很可能)远长于应用程序的生命周期。想象一下这个场景:

  • 用户复制一些数据。您将一个指向拖动对象的指针。
  • 用户退出您的程序。您的对象已被释放。
  • 用户启动程序的另一个实例并点击粘贴。

可能的结果:当程序的第二个实例取消引用无效指针时,您会崩溃。

实际需要在粘贴板上显示的数据可能非常特定于您的程序,但一般来说您不想将“实时”数据放在那里。存档符合您的最大利益。您可能会发现 NSCoder 对于进行简单的归档很有用。

我会在这里提出一个异常(exception),并说如果曾经完成过拖放操作,那么人们可以设想做指针的事情(因为我不认为你可以在程序仍在运行的情况下进行拖动),并且如果您在退出程序时清除了拖动粘贴板。但这不是最佳实践,而且我想说,如果您不是很有经验并且不太清楚其中的陷阱,那么这是一种有风险的技术。

关于objective-c - 使用 "setData"将项目添加到 NSPasteboard ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1305694/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com