2016-03-08 2 views
2

В моем приложении я хотел бы получить доступ к локальному файловому каталогу с закладкой безопасности. повторное использование закладки с областью безопасности

Как указано в App Sandbox Design Guide, я храню указанную папку пользователя (NSOpenPanel) в закладке безопасности (как NSData).

Однако, я нашел URLByResolvingBookmarkData больше не доступен в Swift. Я понятия не имею, как я могу получить доступ к URL-адресу и предоставить разрешение на каталог, который я ранее выбрал после перезапуска моего приложения. Есть идеи?

/// OpenPanel and set the folderPath 
var folderPath: NSURL? { 
    didSet { 
     do { 
      let bookmark = try folderPath?.bookmarkDataWithOptions(.SecurityScopeAllowOnlyReadAccess, includingResourceValuesForKeys: nil, relativeToURL: nil) 

     } catch { 
      print("Set bookMark fails") 
     } 
    } 
} 
+2

Почему, по вашему мнению, не доступен в Swift? [ 'Init (byResolvingBookmarkData: опции: relativeToURL: bookmarkDataIsStale:)'] (https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSURL_Class/index.html#//apple_ref/ occ/instm/NSURL/initByResolvingBookmarkData: options: relativeToURL: bookmarkDataIsStale: ошибка :) –

+0

oops ... Извините. Большое спасибо. – WeiJay

ответ

8

Я понял это с NSUserDefaults.

var userDefault = NSUserDefaults.standardUserDefaults() 
var folderPath: NSURL? { 
    didSet { 
     do { 
      let bookmark = try folderPath?.bookmarkDataWithOptions(.SecurityScopeAllowOnlyReadAccess, includingResourceValuesForKeys: nil, relativeToURL: nil) 
      userDefault.setObject(bookmark, forKey: "bookmark") 
     } catch let error as NSError { 
      print("Set Bookmark Fails: \(error.description)") 
     } 
    } 
} 

func applicationDidFinishLaunching(aNotification: NSNotification) { 
    if let bookmarkData = userDefault.objectForKey("bookmark") as? NSData { 
     do { 
      let url = try NSURL.init(byResolvingBookmarkData: bookmarkData, options: .WithoutUI, relativeToURL: nil, bookmarkDataIsStale: nil) 
      url.startAccessingSecurityScopedResource() 
     } catch let error as NSError { 
      print("Bookmark Access Fails: \(error.description)") 
     } 
    } 
} 
Смежные вопросы