Мой код NSImage( ) отлично работает в Swift 3, но он не работает в Swift 5

#swift #cocoa #nsimage

#swift #cocoa #nsimage

Вопрос:

Мой код предназначен для отображения image.jpg в окне. Это было написано в Swift 3. Недавно я обновился до Swift 4 с помощью Xcode 10.2 . Он вообще не работает. Я также переписал его в Swift 5. Он все еще не работает. Мне пришлось загрузить старый Xcode 10, чтобы запустить мой код в Swift 3, чтобы снова работать. Интересно, что случилось с кодом.

Вот мой основной код для отображения изображения.

 override func viewDidAppear() {
    super.viewDidAppear()

    imageView.image = NSImage(byReferencingFile: "(ViewController.GlobaVariable.selecFile)" )

    print("(ViewController.GlobaVariable.selecFile)")
    /// The print statement work  but not the image.
}
  

Комментарии:

1. Вы проверили, что NSImage(byReferencingFile: "(ViewController.GlobaVariable.selecFile)" ) не равно нулю?

2. Я проверил, что результат равен нулю. Как я могу это исправить? Интересно, почему он работал в swift 3, но не в swift 4 и 5?

3. где находится ваш файл? Не сохраняйте весь путь к файлу. Вы должны сохранить только имя файла и его местоположение / каталог

4. файл находится в каталоге документов. Я просто использую GlobaVaraible для передачи пути. Он хорошо работал в swift 3.

5. Давайте посмотрим на код, который объявляет selecFile . Вы не должны превращать его в строку, используя интерполяцию строк. Разные версии Swift могут выполнять немного разные интерполяции, в зависимости от типа свойства.

Ответ №1:

     let openPanel = NSOpenPanel()
    openPanel.beginSheetModal(for:self.view.window!) { (response) in
        if response.rawValue == NSFileHandlingPanelOKButton
        {
            let fileURL = openPanel.url!

            //////////////////
            let ph = fileURL.absoluteString
            let path = (ph as NSString).substring(from: 7)
            //print(path)

            //////////////////////

            GlobaVariable.selecFile = path

        }
    }
  

Комментарии:

1. Вопрос и ответ не имеют заметной связи друг с другом.