【发布时间】:2020-11-24 00:37:44
【问题描述】:
tl;dr:无法在 Mac Catalyst 中运行的 iOS 应用中加载通过 DropInteraction 接收的 JSON 文件。
我目前正在重构我现有的 (Swift) iOS 代码库,以便在 Mac Catalyst 下的 macOS 上运行,但在读取、加载甚至查看我的UIDropInteractionDelegate 接收的 JSON 文件时遇到问题。
我这里的例子是:https://appventure.me/guides/catalyst/how/drag_and_drop.html
我正在尝试删除一个文件snse.json,它是一个常规的漂亮打印的 JSON 文本文件,但在 func 3 (performDrop) 中,session.items 是一个单项数组,其中没有任何用处。
当我在performDrop 中抛出断点时,我得到以下调试输出:
(lldb) po session.items.first?.itemProvider
▿ Optional<NSItemProvider>
- some : <NSItemProvider: 0x600003876ca0> {types = (
"public.json",
"com.apple.finder.node"
)}
(lldb) po session.items.first?.itemProvider.suggestedName
▿ Optional<String>
- some : "snse.json"
(lldb) po session.items.first?.localObject
nil
(lldb) po session.items.first?.previewProvider
nil
(lldb) po session.items.first?.itemProvider.canLoadObject(ofClass: URL.self)
▿ Optional<Bool>
- some : false
(lldb) po session.items.first?.itemProvider.canLoadObject(ofClass: String.self)
▿ Optional<Bool>
- some : false
这是我目前的代码:
class SentimentViewController: UITableViewController {
override func viewDidLoad() {
super.viewDidLoad()
self.view.interactions.append(UIDropInteraction(delegate: self))
}
}
extension SentimentViewController: UIDropInteractionDelegate {
static let JSONTypeIdentifier = "public.json"
// 1
func dropInteraction(_ interaction: UIDropInteraction,
canHandle session: UIDropSession) -> Bool {
return session.hasItemsConforming(toTypeIdentifiers: [JSONTypeIdentifier])
}
// 2
func dropInteraction(_ interaction: UIDropInteraction, sessionDidUpdate session: UIDropSession) -> UIDropProposal {
return UIDropProposal(operation: .copy)
}
// 3
func dropInteraction(_ interaction: UIDropInteraction, performDrop session: UIDropSession) {
// This is called with an array of NSURL
let _ = session.loadObjects(ofClass: URL.self) { urls in
for url in urls {
self.importJSONData(from: url)
print(url)
}
}
}
private func importJSONData(from url: URL) {
print("I would love to load data from \(url).")
}
}
我确定我做错了什么,但我就是不知道是什么。 我是否需要请求权限才能读取本地文件? 我错过了一步吗? 非常感谢任何帮助!
【问题讨论】:
-
我刚刚验证了尝试从 iPadOS 上的
Files应用程序中删除 JSON 文件时会发生相同的行为。同样的问题,不同的操作系统。我确定我没有正确地做某事,我只是不知道是什么。 -
这项工作正在 Github 上的这个分支中进行跟踪:github.com/BlakeBarrett/snse-ios/pull/4
标签: json swift drag-and-drop mac-catalyst local-files