我正在嘗試在 macOS SwiftUI 應用程式上實作String從ViewAto的簡單拖放ViewB,但我NSItemProvider.loadObject(ofClass:completionHandler:)總是失敗并顯示錯誤“無法將專案強制轉換為 NSString 類”。
ViewA(element: myElement)
.onDrag { NSItemProvider(object: myElement.title as NSString) }
ViewB()
.onDrop(of: [.plainText], isTargeted: nil, perform: { providers, location in
_ = providers.first?.loadObject(ofClass: NSString.self, completionHandler: { text, error in
print("Dropped \(text?.description ?? "?") with error: \(error?.localizedDescription ?? "")")
})
return true
})
需要注意的一些事項:
- 相同的代碼在 iOS/iPadOS 上按預期作業。
- 相反,如果我嘗試
URL通過更改myElement.title為 URL 并更改特定專案提供程式來處理 URL來拖放 a ,則代碼也可以按預期作業。 - 我發現6 個月前的Reddit 帖子有完全相同的問題。
我用這個問題創建了一個簡單的專案:https : //github.com/marcosatanaka/drag-and-drop-string
如何從 加載字串NSItemProvider,以便在 macOS 上將其從一個視圖拖放到另一個視圖?這是一個錯誤還是我做錯了什么?
uj5u.com熱心網友回復:
我認為你可以填補這個錯誤,經過一些除錯后,我認為問題來自提供者專案的創建。
在 iOS 上,我們收到此提供程式:
<UIItemProvider: 0x600000198000> {types = (
"public.utf8-plain-text"
)}
在 macOS 上,我們收到此提供程式:
<NSItemProvider: 0x600000374540> {types = (
)}
正如您所看到的,專案提供程式在型別上為空,這就是您無法加載它的原因。如果沒有型別,系統將無法加載它。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/359018.html
下一篇:使用MacOS/iTerm2/ZSH連接到AWSEC2服務器時出現“setlocale:LC_CTYPE:cannotchangelocale(UTF-8)”
