Tenho um aplicativo SwiftUI/Catalyst que receberá arquivos de áudio/vídeo por arrastar/soltar.
Em uma determinada visualização, tenho o modificador fowling, que aceita os arquivos de mídia especificados.
.onDrop(of: ["public.movie","public.audio"], isTargeted: nil, perform: { providers in
print(providers.first)
let _ = providers.first?.loadObject(ofClass: URL.self, completionHandler: { (url, _) in
print(url)
})
return true
})
Quando eu solto um arquivo, o provedor retornado imprime
Opcional(<NSItemProvider: 0x600002ae4b60> {tipos = ( "com.apple.m4a-audio", "com.apple.finder.node" )})
que parece OK. No entanto, quando tento determinar a URL do arquivo descartado, sempre recebo nil.
O que há de errado com este código?
O provedor de itens não fornece o
public.file-url
identificador de tipo, então eu não esperaria que você conseguisse carregar umURL
dele. Em outras palavras, seu aplicativo simplesmente não é fornecido com umURL
.Se você quiser um
URL
, poderá carregá-lo como um arquivo usandoloadFileRepresentation
, o que salvará uma cópia temporária dos dados como um arquivo.