在安全范围书签、用户选择的读写权限和NSOpenPanel I的帮助下,我可以读/写用户选择的文件夹。
-
补充
<key>com.apple.security.app-sandbox</key>
<true/>
<key>com.apple.security.files.bookmarks.app-scope</key>
<true/>
<key>com.apple.security.files.user-selected.read-write</key>
<true/>
在授权文件中。
-
要求用户使用NSOpenPanel选择(或创建并选择)我的应用程序要访问(读/写)的所需文件夹。
-
当用户选择文件夹时,我使用NSURLBookmarkCreationWithSecurityScope在NSUserDefaults中创建了选定文件夹路径的书签作为书签路径。
NSOpenPanel *openDlg = [NSOpenPanel openPanel];
[openDlg setCanChooseDirectories:YES];
[openDlg setCanCreateDirectories:YES];
[openDlg setAllowsMultipleSelection:FALSE];
[openDlg setPrompt:@"Select"];
if ( [openDlg runModal] == NSModalResponseOK )
{
NSURL *url = openDlg.URL;
NSError *error = nil;
NSData *bookmark = [url
bookmarkDataWithOptions:NSURLBookmarkCreationWithSecurityScope
includingResourceValuesForKeys:nil
relativeToURL:nil
error:&error];
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
[userDefaults setObject:bookmark forKey:@"DOWNLOAD_FOLDER_BOOKMARK_PATH"];
[userDefaults synchronize];
}
-
在NSUserDefaults中保存书签路径后,以后可以使用nsurlbookmarksolutionwithsecurityscope访问保存的路径。
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
NSData * bookmarkedPathData = [userDefaults objectForKey:@"DOWNLOAD_FOLDER_BOOKMARK_PATH"];
NSURL* urlFromBookmark = [NSURL URLByResolvingBookmarkData:bookmarkedPathData
options:NSURLBookmarkResolutionWithSecurityScope
relativeToURL:nil
bookmarkDataIsStale:nil
error:&error];
-
一旦你得到了保存的书签URL,你就可以使用该URL执行读写操作。在读取/写入URL之前,请使用
[urlFromBookmark startAccessingSecurityScopedResource];
[saveFolder stopAccessingSecurityScopedResource];
注意:我曾尝试直接写到文档、下载、桌面,但没有在这些目录中创建文件夹,但苹果拒绝了这个应用程序
您的应用程序访问以下位置“下载”。
然后,我没有直接写入这些目录(文档、下载、桌面),而是要求用户选择(创建和选择)一个文件夹,然后使用安全范围书签对用户选择的文件夹执行读/写操作。
希望这对别人有帮助。