我正在开发一个沙盒的Mac App Store应用程序,该应用程序询问用户在何处保存从其他地方下载的文件。我有这样的代码来获取用户的文件夹(剔除一些错误检查):startAccessingSecurityScopedResource永远不会返回成功
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];
这是很多代码列出来说,startAccessingSecurityScopedResource永远不会为我返回成功,要么从NSOpenPanel获取ULR后立即返回,要么在稍后的运行中将书签数据保存在NSUserDefaults中。
在权利文件,除其他项目,我有:
<key>com.apple.security.files.bookmarks.app-scope</key>
<true/>
有什么不对的代码?
你看到任何控制台消息?此外,仔细检查代码签名以确保配置正确。 – gaige
在您的示例中,在打开面板完成后,“urls”数组来自哪里并不清楚。 – gaige
当我删除错误检查时,我设法编辑出网址以获取网址。我又把它放回去了。在调用startAccessingSecurityScopedResource的行的控制台中没有消息。 –