Swift startAccessingSecurityScopedResource()返回始终为false
当我尝试从iCloud驱动器或Dropbox将文件导入服务器时,startAccessingSecurityScopedResource仅返回false设备,但在模拟器Xcode 8、Swift 2.3、最小目标8.0中测试时返回true 这是我的代码:Swift startAccessingSecurityScopedResource()返回始终为false,swift,icloud,uidocument,uidocumentpickervc,Swift,Icloud,Uidocument,Uidocumentpickervc,当我尝试从iCloud驱动器或Dropbox将文件导入服务器时,startAccessingSecurityScopedResource仅返回false设备,但在模拟器Xcode 8、Swift 2.3、最小目标8.0中测试时返回true 这是我的代码: { func showCloudDriveAction(inputBar: NAChatInputBar) { let documentmenuPicker = UIDocumentMenuViewCont
{
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()
}
}
}
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()
}
我猜如果ISSecureURL{url.stopAccessingSecurityScopedResource}应该在catch块之后,在闭包内部