Ответ 1
В моей тестовой программе это работает отлично. Я подозреваю, что добавление имени файла в URL-адрес проваливается в вашем случае (но это огромная догадка), потому что это единственное, что кажется существенным другим.
Я заметил, что URL-адрес для безопасности разрешенного места является: Файл://локальный/Users/папа/Desktop/TestFolder applesecurityscope = 343335323030663066393432306234363030346263613464636464643130663635353065373030373b30303030303030303b303030303030303030303030303032303b636f6d2e6170706c652e6170702d73616e64626f782e726561642d77726974653b30303030303030313b30313030303030323b303030303030303030326461363838663b2f75736572732f74796c65722f6465736b746f702f74657374666f6c646572
что является другой причиной, о которой я спрашиваю, является ли проблема с добавлением.
В моем тесте у меня есть пользователь, который выбирает папку, создаю закладку с областью безопасности и затем сохраняю ее в настройках по умолчанию.
Затем я завершаю и перезапускаю приложение, и с помощью команды меню я получаю эту закладку и затем ее разрешаю. Затем я добавил случай, когда я использую разрешенную закладку в папку и создаю новую закладку для файла в папке.
Кажется, что все нормально.
В моем тесте, где он работает, я получаю путь к файлу следующим образом:
NSURL * resolvedURL = [NSURL URLByResolvingBookmarkData: data
options: NSURLBookmarkResolutionWithSecurityScope
relativeToURL: nil
bookmarkDataIsStale: &isStale
error: &error];
... // (error checking)
[resolvedURL startAccessingSecurityScopedResource];
NSArray * files = [[NSFileManager defaultManager]
contentsOfDirectoryAtURL: resolvedURL
includingPropertiesForKeys: @[NSURLLocalizedNameKey, NSURLCreationDateKey]
options: NSDirectoryEnumerationSkipsHiddenFiles
error: &error];
if ( files != nil )
{
NSURL * fileURL = [files objectAtIndex: 0]; // hard coded for my quick test
NSData * newData = [fileURL bookmarkDataWithOptions: NSURLBookmarkCreationWithSecurityScope
includingResourceValuesForKeys: nil
relativeToURL: nil
error: &error];
if ( newData != nil )
{
NSLog(@"it good!");
}
.... // error checking and logging.
Если это не поможет вам на правильном пути, мне нужно будет увидеть больше кода (вам, вероятно, нужно будет сделать простой пример).
Обратите внимание, что в моем случае я разрешаю закладку и вызываю startAccessingSecurityScopedResource
, даже когда я только что получил url и создал закладку (когда я попытался создать закладку из пути, который я только что приобрел из PowerBox (openPanel ) с ошибкой 256).
Некоторые детали конфигурации: OS X 10.8.4, Xcode 5 (первый публичный выпуск с сегодняшнего дня 18/9/2013).