问题标签 [nsitemprovider]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
366 浏览

macos - 从 NSItemProvider 获取文件名/路径

我的 macOS 共享扩展程序需要图像或视频文件。

我希望能够访问NSItemProvider对象的文件名(或路径)。

我想我可以itemProvider.loadDataRepresentation()用来获取媒体的数据。但是我不清楚如何检索文件名/路径。

当我打印 itemProvider 对象时,我得到了这个:

任何帮助表示赞赏。谢谢

0 投票
0 回答
165 浏览

ios - 如何使用 loadItemForTypeIdentifier 加载图像

我有以下函数,它使用 new 加载图像PHPickerViewController

我想避免使用loadObjectOfClass,因为我不希望图像异步加载。所以我选择loadItemForTypeIdentifier改用并做了以下事情:

但是,当我运行此代码时,我得到:

ncaught 异常“NSInvalidArgumentException”,原因:“-[NSURL imageOrientation]:无法识别的选择器发送到实例 0x600001ce5920”以 NSException 类型的未捕获异常终止

我对积木不是很好,这是我第一次使用 aUTI所以我想知道,我在这里做错了什么?甚至有可能完成我想要完成的事情,即UIImage使用拉出loadItemForTypeIdentifier吗?我的语法错了吗?

0 投票
2 回答
1321 浏览

swift - 如何在 SwiftUI 拖放中在 NSItemProvider 中传递不仅仅是一个字符串

我在 Stack Overflow 上查看了一些关于使用 SwiftUI 进行拖放重新排序的问题,这个问题特别有用:SwiftUI | 使用 onDrag 和 onDrop 在一个 LazyGrid 中重新排序项目?

我正在寻找扩展此功能,在我的 SwifUI 应用程序中,我将某些项目从一个项目列表拖到另一个项目列表中。假设我有一个Task清单:

...而且我还有一个Project列表,我可以将其Task拖到该列表上以将其移动到该项目:

我正在努力的部分是在我ProjectDropDelegate试图确定几件事的地方:

  1. 什么样的物体落在我身上?(必须是任务)
  2. 如果它是一项任务,它是什么,id所以我可以对其采取行动?(或者,理想情况下,我会让整个Task对象都可以使用)

我不知道如何让我使用除字符串以外的任何东西NSItemProvider.onDrag并且仍然可以使用我的 SwiftUI 拖放功能。对于它的价值,我TaskProject对象是核心数据类。

如何使NSItemProvider包含键值对,以便我可以传递一个类型标识符字符串,如myapp.task(对于上面的#1)和一个id(对于#2)?

0 投票
0 回答
67 浏览

macos - NSItemProvider 在 SwiftUI MacOS 应用程序中没有注册类型标识符

放置目标的简单示例。在 MacOS 上运行。当您从另一个应用程序(例如 Notes)拖动文本内容时,它被成功定位(即框变为绿色),但没有为实际放置公开任何类型。生成的日志消息是:

Item can't load desired type. Types registered:

这是沙盒问题吗?我感到很困惑....

0 投票
0 回答
211 浏览

swift - SwiftUI 中的 NSItemProvider loadObject 拖放

我在 SwiftUI 中使用 DropDelegate 拖放视图。我使用 .onDrag 视图修改器成功地将我的数据包装在 NSItemProvider 中,如果我能够让我的放置数据成为我的 DropDelegate 的存储属性之一,我什至可以让 .onDrop 工作。

我正在尝试允许使用提供的 DropInfo 解码我的放置数据。我在dropEntered(info:)委托方法中更新了我的视图,以便用户可以在它发生之前预览他们的放置。当我写

不调用完成处理程序。如果我改为在performDrop(info:)委托方法中编写此闭包,则会调用完成处理程序。为什么只调用完成处理程序performDrop(info:)?有没有办法在不更改数据模型的情况下实时执行必要的更改时进行拖放预览dropEntered(info:)

我不喜欢在 中编辑我的数据模型dropEntered(info:),而且我还没有了解如果用户以某种方式取消拖放操作会如何工作……也许有更好的方法来解决这个问题我要编辑我的数据模型performDrop(info:)吗?

谢谢!

编辑

这是重现该错误的代码:

0 投票
0 回答
12 浏览

uicollectionview - 我们可以只将collectionview单元格内的图像拖放到UIView而不是移动整个collectionview单元格吗?

当我单击并拖动时,整个单元格正在移动。有没有办法只在 collectionviewcell 内移动图像。

提前感谢您的解决方案。

0 投票
1 回答
34 浏览

ios - 自定义数据不适用于 itemProvider 的拖放集合视图功能 - Swift

我有一个集合视图,它显示排列在名为“claimData”的自定义数据模型(结构)中的数据。

声明数据声明:

我通过 sharedInstance 共享这些数据的状态,因为我使用的是浮动面板。

ReviewDataController 只保存一个名为“tableViewReviewData”的 claimData 数组。

我正在尝试在浮动面板的 collectionView 中实现拖放功能,但我似乎无法让 itemProvider 与我的自定义数据模型一起使用。

这就是我目前所拥有的:

这是我为 itemProvider 得到的错误: “Argument type 'claimData?' 不符合预期类型 'NSItemProviderWriting'"

感谢您的帮助,如果您有任何问题,请告诉我!!

0 投票
1 回答
126 浏览

swiftui - SwiftUI:没有在 DropDelegate 中删除 NSString 值

我正在尝试使用 NSString 实现简单的拖放操作。我可以使用 NSURL 但不能使用 NSString。每次我尝试拖放时,我总是得到一个 nil 值。这是我的代码:

然后丢弃的对象:

我本来希望输出是“Hello World”。我错过了什么?

0 投票
1 回答
66 浏览

ios - 获取给定 NSItemProvider 的媒体项的大小?

我正在使用 aPHPickerViewController来允许用户从他们的库中选择一个媒体项目。感兴趣的具体案例是他们选择视频的时间。

我收到PHPickerViewControllerDelegate委托方法的回调:

我正在使用loadFileRepresentationNSItemProvider.

但是,该调用需要大量时间。而且这一切可能都是徒劳的——因为我对用户可以添加到应用程序的视频施加了大小限制。

所以,我的问题是:有没有办法快速确定用户选择的媒体项目的大小?例如,给定NSItemProvider?

0 投票
1 回答
50 浏览

swift - 将 TableView 的拖放 API 与底层值类型数据对象一起使用

在 iOS 11 中,Apple 通过该类向操作系统引入了拖放 API(主要是支持在 iPadOS 上的应用程序之间进行拖动),NSItemProvider并为 UITableView 提供了自定义实现,其中包含UITableViewDragDelegateUITableViewDropDelegate.

除非我在处理 tableViews 的 diffable 数据源时遗漏了某些东西(总是可能的!),否则使用这些 API 的最佳方法是将底层封装item在从当前快照获得的数据源中,NSItemProvider然后将其嵌入到 aUIDragItem中以方便通过委托方法拖放。特别是在拖动委托中,例如:

但是,要使用 NSItemProvider,底层数据对象需要符合NSObjectNSItemProviderReadingNSItemProviderWriting。这是为常见NSxxx数据类型提供的,但任何自定义数据对象都需要采用这些。如果您的数据对象是一个类,那么遵守这些协议相对简单,但如果它是一个值类型,则不是因为这些是类协议。甚至原生 Swift 值类型也必须桥接到它们的旧版等价物(例如Stringto NSStringDatato NSData)才能与这些 API 一起使用。

这让我想到了问题的症结所在:我希望将这些拖放 API 引入到已建立的代码库中,其中底层数据对象出于充分的理由都是值类型。出于多种原因,我不愿意将这些结构更改为类,包括引入新的错误和回归。

我已经考虑(但尚未测试)只是将这些数据对象包装在 tableView 的视图模型中的类对象中。让包装类初始化程序获取原始结构并将其添加到类中的属性中。然后使这个包装类符合必要的协议。不过,如果可能的话,这是我宁愿避免的开销,因为这意味着更改 tableView 方法并实现一种方法来将任何更改写回更广泛的数据模型中的底层结构。另外,我还不知道NSItemProvider自定义类中需要支持的 if 协议是否继承自值类型属性可能有问题的任何其他协议。

如果有人对如何最好地解决这个问题有任何建议,将不胜感激(请不要建议第三方库,因为这不是我想要追求的路线)。