具有 UIDocumentPickerModeOpen 模式的 UIDocumentPickerViewController 未授予在 xcode 中编辑文件的权限(iOS)

Gro*_*ile 2 iphone xcode objective-c ios

我希望用户从文件应用程序中选择一个文件,我必须读取该文件的内容,修改它并将其写入同一位置。

我试图使用以下代码打开该文件:

UIDocumentPickerViewController *documentProvider;
documentProvider = [[UIDocumentPickerViewController alloc] initWithDocumentTypes:[NSArray arrayWithObjects:@"public.comma-separated-values-text", nil] inMode: UIDocumentPickerModeOpen];
documentProvider.delegate = self;
documentProvider.modalPresentationStyle = UIModalPresentationOverFullScreen;
Run Code Online (Sandbox Code Playgroud)

委托功能:

- (void)documentPicker:(UIDocumentPickerViewController *)controller didPickDocumentAtURL:(NSURL *)url { NSLog(@"%@", url.absoluteString); }

但是当我尝试查看或编辑该文件时,它显示错误,表明我没有查看/写入权限。

我收到的 URL 是 file:///private/var/mobile/Library/Mobile%20Documents/com~apple~CloudDocs/filename.csv

有什么办法可以获取 iCloud 中文件的权限吗?我发现很少有第三方应用程序可以修改文件的内容。

Kyl*_*yle 5

您需要通过安全范围的书签访问该文件。像这样:

- (void) documentPicker: (UIDocumentPickerViewController *) controller
   didPickDocumentAtURL: (NSURL *) url
{
    if (controller.documentPickerMode == UIDocumentPickerModeOpen)
    {
            BOOL isAccess = [url startAccessingSecurityScopedResource];
            if(!isAccess)
            {
                return;
            }

            NSError * fileOpenError = nil;
            NSString * fileContents = [NSString stringWithContentsOfURL: url
                                                               encoding: NSUTF8StringEncoding
                                                                  error: &fileOpenError];

            // FileContents should now be set properly.

            [url stopAccessingSecurityScopedResource];
    }
}
Run Code Online (Sandbox Code Playgroud)