在沙盒应用程序中,我使用
NSOpenPanel
让用户选择源文件夹。然后,我保存一个书签,以便下次加载应用程序时重复使用,如下所示:
let defaults = UserDefaults.standard
let bookmark = try! url.bookmarkData(options: .securityScopeAllowOnlyReadAccess)
defaults.set(bookmark, forKey: "sourceFolder")
然后
onAppear
:
if let bookmarkData = defaults.data(forKey: "sourceFolder") {
print(bookmarkData) // 808 bytes
var stale = false
let savedCurrentDirectory = try! URL(resolvingBookmarkData: bookmarkData, options: .withSecurityScope, relativeTo: nil, bookmarkDataIsStale: &stale)
但这失败了:
致命错误:“尝试!”表达式意外引发错误:Error Domain=NSCocoaErrorDomain Code=259“无法打开该文件,因为它的格式不正确。”
如果我删除
.withSecurityScope
,它似乎工作正常。发生什么事了?
您没有使用
.withSecurityScope
选项创建书签。您需要结合 .securityScopeAllowOnlyReadAccess
来做到这一点