Problem z tworzeniem zakładki z zabezpieczeniami

Konwertuję aplikację Lion, aby korzystać z aplikacji Sandbox. Próbuję skorzystać zzakładki z zabezpieczeniami funkcja wprowadzona w 10.7.3, aby umożliwić stały dostęp do folderu. Kod, który mam poniżej, zwraca zerową zakładkę i generuje następujący komunikat dziennika:XPC couldn't look up the Mach service for scoped bookmarks agent.

UstawiłemUser Selected File Access uprawnienie doRead/Write Access, a także próbował z i bez otoczenia..AccessingSecurityScopedResource połączenia.

Myślę, że robię wszystko zgodnie z dokumentacją, więc docenię wszelkie wskazówki. Kod pracował nad pobraniem zwykłego adresu URL przed rozpoczęciem piaskowania aplikacji.

<code>NSOpenPanel *openPanel = [NSOpenPanel openPanel];
[openPanel setCanChooseFiles:NO];
[openPanel setCanChooseDirectories:YES];
[openPanel setAllowsMultipleSelection:NO];

NSInteger result = [openPanel runModal];

if( result == NSFileHandlingPanelCancelButton ) {
    return;
}

NSArray *urls = [openPanel URLs];

if( urls != nil && [urls count] == 1 ) {
    NSURL *url = [urls objectAtIndex:0];

    NSData *bookmark = nil;
    NSError *error = nil;
    bookmark = [url bookmarkDataWithOptions:NSURLBookmarkCreationWithSecurityScope
             includingResourceValuesForKeys:nil
                              relativeToURL:nil // Make it app-scoped
                                      error:&error];
    if (error) {
        NSLog(@"Error creating bookmark for URL (%@): %@", url, error);
        [NSApp presentError:error];
    }

    NSLog(@"bookmark: %@", bookmark);
}
</code>

Aktualizacja (x3)

Teraz, kiedy to działa, mogę zweryfikować, czy połączenia do-startAccessingSecurityScopedResource i-stopAccessingSecurityScopedResource nie są konieczne w powyższym kodzie, ponieważ Powerbox zapewnia dostęp do zasobu po wybraniu go przez użytkownikaNSOpenPanel.

Jeśli tworzysz zakładkę z innego adresu URL z zakresem zabezpieczeń, na przykład tworząc zakładkę o zasięgu dokumentu z zakładki o zasięgu aplikacji utworzonej w innej sesji aplikacji, musisz najpierw uzyskać dostęp do pliku.

questionAnswers(1)

yourAnswerToTheQuestion