我使用的是 Objective-c、Xcode 11、macOS 而不是 iOS、沙盒应用程序。
我需要手动更新最近的文档菜单。我将 URL 存储在书签中,以便我可以根据沙盒访问它们。
奇怪的是代码 A 有效,但 B 无效。有人对此有解释吗?
// Code A
NSURL* bookmarkURL = (some valid URL from bookmark);
[bookmarkURL startAccessingSecurityScopedResource]; <- returns TRUE
[[NSDocumentController sharedDocumentController] noteNewRecentDocumentURL:bookmarkURL];
//[bookmarkURL stopAccessingSecurityScopedResource]; <-- Without closing access it works
// Code B
NSURL* bookmarkURL = (some valid URL from bookmark);
[bookmarkURL startAccessingSecurityScopedResource]; <- returns TRUE
[[NSDocumentController sharedDocumentController] noteNewRecentDocumentURL:bookmarkURL];
[bookmarkURL stopAccessingSecurityScopedResource];
B 不起作用(关闭安全访问)!不关闭安全访问感觉是错误的。对于案例 B,将引发以下错误
Insert failed for list identifier com.apple.LSSharedFileList.ApplicationRecentDocuments Error: Error Domain=NSPOSIXErrorDomain Code=1 "Operation not permitted" (Restricted by sandbox) UserInfo={NSDebugDescription=Restricted by sandbox}
在没有启动安全访问的情况下(显然)会抛出相同的错误。