我正在開發一個沙盒的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的行的控制檯中沒有消息。 –