#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. Вопрос и ответ не имеют заметной связи друг с другом.