2016-12-14 14 views
1

Когда я пытаюсь импортировать файл на свой сервер из iCloud Drive или Dropbox, startAccessingSecurityScopedResource() возвращает только ложное устройство, но возвращает true при тестировании в симуляторе (Xcode 8, Swift 2.3, минимальная цель 8.0).startAccessingSecurityScopedResource() return always false

Это мой код:

{ 
     func showCloudDriveAction(inputBar: NAChatInputBar) { 
      let documentmenuPicker = UIDocumentMenuViewController(documentTypes: ["public.data"], inMode: .Import) 
      documentmenuPicker.delegate = self 
      presentViewController?.presentViewController(documentmenuPicker, animated: true, completion: nil) 
     } 

} 

extension NAChatInputBarPresenter: UIDocumentPickerDelegate, UIDocumentMenuDelegate { 

    public func documentMenu(documentMenu: UIDocumentMenuViewController, didPickDocumentPicker documentPicker: UIDocumentPickerViewController) { 
     documentPicker.delegate = self 
     self.presentViewController?.presentViewController(documentPicker, animated: true, completion: nil) 
    } 

    public func documentPicker(controller: UIDocumentPickerViewController, didPickDocumentAtURL url: NSURL) { 
     if url.startAccessingSecurityScopedResource() { 
      guard let path = url.path, data = NSData(contentsOfFile: path) else { 
       return 
      } 
      delegate?.chatInputBarPresenter(data, atUrl: url) 
      url.stopAccessingSecurityScopedResource() 
     } 
    } 

} 

ответ

1

startAccessingSecurityScopedResource не должен возвращать true он просто должен быть в паре с stopAccessingSecurityScopedResource().

Если он возвращает false, вы можете использовать NSFileCoordinator для доступа к ресурсу.

let isSecuredURL = url.startAccessingSecurityScopedResource() == true 
let coordinator = NSFileCoordinator() 
var error: NSError? = nil 
coordinator.coordinate(readingItemAt: url, options: [], error: &error) { (url) -> Void in 
    do { 
     // do something 
    } catch (_) { 
     // something went wrong 
    } 
} 
if (isSecuredURL) { 
    url.stopAccessingSecurityScopedResource() 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^