San*_*D S 9 objective-c ios ios-extensions
我有一个 iOS 应用程序,它有一个操作扩展来保存文档。
startAccessingSecurityScopedResource()即使我能够访问该文件,该方法在某些情况下也会返回 false。
BOOL success = [originalURL startAccessingSecurityScopedResource];
if (success) {
NSFileCoordinator *fileCoordinator = [[NSFileCoordinator alloc] init];
NSError *error = nil;
[fileCoordinator coordinateReadingItemAtURL:originalURL options:NSFileCoordinatorReadingForUploading error:&error byAccessor:^(NSURL *newURL) {
//My Code
}
}
Run Code Online (Sandbox Code Playgroud)
在上面的代码中,观察到以下内容
从 Apple 的照片应用程序共享文件时
originalURL = file:///var/mobile/Media/PhotoData/OutgoingTemp/49152B46-E719-41A5-A5D5-21EAE6254246/RenderedPhoto/IMG_0026.JPG
Run Code Online (Sandbox Code Playgroud)
从 MS Word App 共享文件时
originalURL = file:///private/var/mobile/Containers/Data/Application/1B0C962F-E7B4-46ED-A9DA-A8213E05A470/tmp/ShareAttachments/%7BC699DC26-37F9-A949-8F69-1F9D6981C4B0%7D/Document.docx
Run Code Online (Sandbox Code Playgroud)
从 Apple 的 Pages 应用程序共享文件时
originalURL = file:///private/var/mobile/Containers/Data/Application/CDBBDC79-02C7-4ABF-A6B9-F38B6540E2B1/Documents/Document%20(1).pages
Run Code Online (Sandbox Code Playgroud)
该标志success位于true第一种情况(照片应用程序)中,但位于false其他两种情况(单词和页面应用程序)中。
如果我删除成功标志检查,我就可以使用 NSFileCoordinator 访问所有三个文件,并且可以将文件复制到我的应用程序中。
因此,我不确定为什么startAccessingSecurityScopedResource()在我显然有权复制文件的情况下该方法返回 false。
动机是使用操作扩展将从文件编辑器应用程序导出的文件保存到我的 iOS 应用程序中。
我仅用于success确定是否需要在完成处理程序stopAccessingSecurityScopedResource()内调用NSFileCoordinator。
BOOL success = [originalURL startAccessingSecurityScopedResource];
NSFileCoordinator *fileCoordinator = [[NSFileCoordinator alloc] init];
NSError *error = nil;
[fileCoordinator coordinateReadingItemAtURL:originalURL options:NSFileCoordinatorReadingForUploading error:&error byAccessor:^(NSURL *newURL) {
//My Code
if (success) {
[originalURL stopAccessingSecurityScopedResource];
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,根据Apple的文档,如果您不致电stopAccessingSecurityScopedResource():
如果您在不再需要文件系统资源时未能放弃对它们的访问权限,则您的应用程序会泄漏内核资源。如果泄漏了足够的内核资源,您的应用程序将失去将文件系统位置添加到其沙箱的能力,例如通过 Powerbox 或安全范围的书签,直到重新启动为止。
| 归档时间: |
|
| 查看次数: |
5855 次 |
| 最近记录: |