2

我在 Xamarin iOS 中使用文档选择器。在 DocPicker 的示例中,他们调用了诸如 StartAccessingSecurityScopedResource 之类的东西,并在顶部添加了注释。

// 重要的!您必须先锁定安全范围,然后才能 // 访问此文件。

为什么他们必须锁定这个文件?是否防止文件在访问文件时从其他地方修改。

4

1 回答 1

2

在 iOS(和 MacOS 沙盒应用程序)中,访问外部文档(您自己的应用程序沙盒之外的文档)需要由操作系统跟踪的特殊权限。因此,一旦您有一个指向外部文件的 NSUrl,您实际上无法访问它,直到您明确要求它,因为这样做会产生安全/资源开销,

注意:确保你调用,StopAccessingSecurityScopedResource否则你的应用程序会泄漏基于内核的资源(try/finally是一个明智的编码模式)

在 iOS 中,使用 UIDocumentPickerViewController 打开或移动文档的应用程序也会收到安全范围的 URL。

要获得对安全范围 URL 的访问权限,您必须调用 startAccessingSecurityScopedResource() 方法(或其 Core Foundation 等效的 CFURLStartAccessingSecurityScopedResource(_:) 函数)。对于 iOS 应用程序,如果您使用 UIDocument 访问 URL,它会自动为您管理安全范围的 URL。

参考:安全范围的 URL

于 2016-09-28T23:39:45.373 回答