#swift #macos #nspasteboard
#swift #macos #nspasteboard
Вопрос:
У меня есть видео mp4, сохраненное в папке.
Как я могу скопировать видео из моего приложения в виде файла, чтобы вставить его на другие платформы, такие как Telegram или Finder, чтобы вставить его как новый файл? На данный момент это функция, которую я написал, но она вставляет видео только в текстовое поле iMessage.
func copyVideo() {
guard let url = TaskManager.shared.lastVideoURL else { return }
do {
let data = try Data(contentsOf: url)
let pasteboard = NSPasteboard.general
pasteboard.declareTypes([kUTTypeMPEG4 as NSPasteboard.PasteboardType], owner: nil)
print(pasteboard.setData(data, forType: kUTTypeMPEG4 as NSPasteboard.PasteboardType))
} catch {
print("error getting data from video (error)")
}
}
Что я делаю не так?
Комментарии:
1. Это действительно плохая идея. Вы пытаетесь загрузить все данные фильма в память. Это приведет к сбою вашего приложения.
2. Что вы предлагаете, как я могу с этим справиться?
Ответ №1:
После некоторого теста я нашел решение.
Этот метод копирует видео в виде файла:
func copyVideo() {
guard let url = TaskManager.shared.lastVideoURL else { return }
if let fileRefURL = (url as NSURL).fileReferenceURL() as NSURL? {
print(fileRefURL)
let pasteboard = NSPasteboard.general
pasteboard.clearContents()
pasteboard.writeObjects([fileRefURL])
pasteboard.setString(fileRefURL.relativeString, forType: .fileURL)
}
}