我正在开发一款沙盒化的Mac App Store应用,它会询问用户从其他地方下载文件时希望将文件保存在哪里。我有以下代码来获取用户选择的文件夹(省略了一些错误检查):
NSOpenPanel* openPanel = [NSOpenPanel openPanel];
[openPanel setAllowsMultipleSelection:NO];
[openPanel setCanChooseDirectories:YES];
[openPanel setResolvesAliases:YES];
NSInteger result = [openPanel runModal];
NSArray* urls = [openPanel URLs];
NSURL* folderURL = [urls objectAtIndex:0];
NSError* error;
NSData* bookmakeData = [folderURL bookmarkDataWithOptions:NSURLBookmarkCreationWithSecurityScope
includingResourceValuesForKeys:nil
relativeToURL:nil
error:&error];
_saveFolderBookmark = bookmakeData;
当需要将一个文件移动到这个文件夹时,我有如下代码:
BOOL isStale;
NSError* error;
NSURL* saveFolder = [NSURL URLByResolvingBookmarkData:_saveFolderBookmark
options:NSURLBookmarkCreationWithSecurityScope
relativeToURL:nil
bookmarkDataIsStale:&isStale
error:&error];
BOOL success = [saveFolder startAccessingSecurityScopedResource];
// Move the file somewhere else
NSWorkspace* workspace = [NSWorkspace sharedWorkspace];
NSInteger operationTag;
BOOL copied = [workspace performFileOperation:NSWorkspaceMoveOperation
source:[[self getDocumentsFolder] path]
destination:[saveFolder path]
files:[NSArray arrayWithObject:filename]
tag:&operationTag];
[saveFolder stopAccessingSecurityScopedResource];
这是一大段代码,说的是无论是在从NSOpenPanel获取URL后立即调用startAccessingSecurityScopedResource还是在稍后运行时,使用NSUserDefaults保存书签数据,该函数都不会返回成功。
在授权文件中,除了其他项之外,我有:
<key>com.apple.security.files.bookmarks.app-scope</key>
<true/>
这段代码有什么问题吗?
urls
数组的来源不清楚。 - gaige