Как я могу переместить файл во внутреннее приложение из документа / папки «Входящие» в Swift, например «попробовать FileManager.default.moveItem»? - PullRequest
0 голосов
/ 15 июня 2019

Я хотел бы переместить файл во внутреннее приложение из документа / папки «Входящие».Я уже пишу ниже.Но что-то не так.


class FileListViewController: UITableViewController {

class func move(_ atPathName: String, name: String, toPathName: String) -> Bool {
    let fileManager = FileManager.default
    do {
        try fileManager.moveItem(atPath: atPathName, toPath: toPathName)
    } catch {
        return false
    }
    return true
}

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    let selectedVRMpath = NSHomeDirectory() + "/Documents/Inbox/(indexPath.row)"
    let newVRMpath:String? = Bundle.main.path( forResource: "Febboy2", ofType: "vrm" )
    let selectedNameinList = newarray[indexPath.row]

    FileListViewController.move(selectedVRMpath, name: selectedNameinList, toPathName: newVRMpath)

Сообщение об ошибке:

Значение необязательного типа 'String?'должен быть развернут в значение типа 'String'


.vrm, размер файла составляет около 10 МБ

Наконец, я использую файл в ViewController.Мне нужно переместить файл внутрь проекта из Documents / Inbox.Если я неправильно понимаю это решение, дайте мне совет.Я не мог напрямую использовать файл VRM для выбора URL Documents / Inbox в другом классе.

---

Спасибо за подсказку из ответа. Я изменил код следующим образом.

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
   let selectedVRMpath = NSHomeDirectory() + "/Documents/Inbox/(indexPath.row)"
   guard let newVRMpath:String = Bundle.main.path( forResource: "Febboy2", ofType: "vrm" ) else { return }
   let selectedNameinList = newarray[indexPath.row]
   print("Selected! \(self.newarray[indexPath.row])")
   FileListViewController.move(selectedVRMpath, name: selectedNameinList, toPathName: newVRMpath)
}

Сообщение об ошибке исчезло.Но я знаю, что проблема еще есть.

1 Ответ

0 голосов
/ 15 июня 2019

Вам нужно принудительно развернуть newVRMpath или использовать guard

guard let newVRMpath = Bundle.main.path( forResource: "Febboy2", ofType: "vrm" ) else { return }
FileListViewController.move(selectedVRMpath, name: selectedNameinList, toPathName: newVRMpath!)

Это исправит ошибку компиляции, но не будет работать, так как вы не можете записать в основной пакет, вам нужно создать новый путь, скажем, из папки документов

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...