Поделитесь аудиофайлом через общий листок

78
9

Я пытаюсь поделиться аудио файлом, используя функциональность sharecheet iOS. У меня возникли проблемы с получением аудиофайла аудиофайла в sharecheet для совместного использования. Как бы то ни было, в электронном письме не добавлено и прикреплено или аудиофайлы (например).

У меня есть следующий код, который извлекает аудиофайл. Я могу отправить его явно по электронной почте с помощью MFMailComposeViewController, но вместо этого хотел бы "бросить" его на листе, чтобы разрешить пользователю загружать файл электронной почты /Dropbox/Google.

Это возможно?

    let objectsToShare: NSMutableArray = []

let docsDir = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0]
let soundFilePath = (docsDir as NSString).stringByAppendingPathComponent(fileName)
let fileManager = NSFileManager.defaultManager()
let fileContent = fileManager.contentsAtPath(soundFilePath)

objectsToShare.addObject(fileContent!)

if let objects = objectsToShare as [AnyObject]? {
let activityVC = UIActivityViewController(activityItems: objects, applicationActivities: nil)

if let subject = noteTitle.text as String? {
activityVC.setValue(subject, forKey: "subject")
}

self.presentViewController(activityVC, animated: true, completion: nil)
}

Заранее спасибо :)

спросил(а) 2021-01-19T19:53:22+03:00 6 месяцев, 2 недели назад
1
Решение
78

Вы помещаете содержимое файла в objectsToShare. activityVC может обмениваться контентом, но не знает, что это файл для совместного использования.

Я думаю, вам нужен UIDocumentInteractionController. Как этот непроверенный код:

var dic:UIDocumentInteractionController? // has to be instance variable not buried in a method, or the dic is deallocated before it can open the file.
func shareFile(filePath:String, fileName: String, from:UIBarButtonItem) {
let url = NSURL(fileURLWithPath: filePath)
dic = UIDocumentInteractionController(URL:url)
dic?.UTI = fileName
dic?.presentOptionsMenuFromBarButtonItem(from, animated: true)
}

Если вы сделаете dic локальной переменной внутри метода shareFile, она, как правило, будет освобождена до того, как файл будет открыт и получит вас. Couldn't get file size for (null) ошибки. Вместо этого сделайте вместо него переменную экземпляра класса.

ответил(а) 2021-01-19T19:53:22+03:00 6 месяцев, 2 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема