Zajmuję się tworzeniem aplikacji piaskownicy Mac App Store, która pyta użytkownika, gdzie zapisać pliki pobrane z innych źródeł. Mam ten kod, aby uzyskać folder z użytkownikiem (stripping się jakiś sprawdzanie błędów):StartAccessingSecopedScopedResource nigdy nie zwraca sukcesu
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;
a gdy przychodzi czas, aby przenieść plik do tego folderu, mam ten kod:
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];
Które jest dużo kodu do listy, aby powiedzieć, że startAccessingSecurityScopedResource nigdy nie zwraca sukcesu dla mnie, albo natychmiast po uzyskaniu ULR z NSOpenPanel lub w późniejszym uruchomieniu, z danymi zakładki są zapisywane w NSUserDefaults.
W pliku uprawnienia, między innymi, mam:
<key>com.apple.security.files.bookmarks.app-scope</key>
<true/>
Czy jest coś nie tak z tym kodem?
Czy widzisz jakieś komunikaty konsoli? Należy również dokładnie sprawdzić podpisywanie kodu, aby upewnić się, że jest poprawnie skonfigurowany. – gaige
W twoim przykładzie nie jest jasne, skąd pochodzi tablica 'urls' po zakończeniu otwartego panelu. – gaige
Udało mi się wyedytować wiersz uzyskiwania adresów URL po usunięciu sprawdzania błędów. Znowu go włożyłem. W konsoli nie ma żadnych komunikatów dotyczących wywoływania linii startAccessingSecurityScopedResource. –