【发布时间】:2021-01-05 08:51:09
【问题描述】:
应用程序可能会打开一个对话框,允许选择图像并将其显示给用户。用户选择图片的代码是:
let myFiledialog = NSOpenPanel()
myFiledialog.prompt = "Upload image"
myFiledialog.canChooseDirectories = false
myFiledialog.canChooseFiles = true
myFiledialog.allowedFileTypes = ["png", "jpg", "jpeg"]
myFiledialog.allowsMultipleSelection = false
myFiledialog.begin { [weak self] result -> Void in
guard
result.rawValue == NSApplication.ModalResponse.OK.rawValue,
let selectedPath = myFiledialog.url?.path
else {
return
}
guard let image = NSImage(contentsOfFile: selectedPath) else {
return
}
someImageView.image = image
UserDefaults.standard.set(selectedPath, forKey: "imagePath")
}
我正确显示图像。这个想法是用户可以关闭应用程序,打开它并查看图像。
我正在获取图像名称:
let pathName = UserDefaults.standard.string(forKey: "imagePath")
我比较了设置断点pathName == selectedPath,它们是相等的。
但是,做
NSImage(contentsOfFile: pathName!)
是nil。
这是否与我需要获取读取文件系统中的数据的权限有关?我应该将用户图像保存在可以访问它们的其他地方吗?也许也可以将 NSUserDefaults 设置为 images.data?
感谢您的帮助。
【问题讨论】:
-
你被沙盒化了。您需要书签文件的 URL。参见例如developer.apple.com/documentation/foundation/nsurl/…
-
不要问
UserDefaults能为你做什么。询问您可以为安全范围的书签做什么。 -
感谢@matt,我可以看到书签方法返回了一个 URL。我应该使用 NSUserDefaults 来保存那个 URL 吗?